[S]uatu saat mungkin pembaca akan menemui kasus dimana harus menampilkan suatu list berdasarkan urutan yang ada pada list yang lain. Tulisan saya kali ini akan menunjukkan cara mengurutkannya menggunakan 2 buah metode.
Metode pertama adalah menggunakan perulangan for sedangkan cara kedua menggunakan Linq
Contoh Kasus
Misal kita punya sebuah kelas untuk menampung data orang
1 2 3 4 5 |
public class Orang { public string id {get;set;} public string name {get;set;} } |
List dari kelas inilah yang nanti akan kita urutkan berdasarkan list yang lain. Misal list yang lain itu adalah sebagai berikut
1 |
string[] docIds=new string[5]{"5", "1", "4", "3", "2"}; |
Kode utamanya adalah sebagai berikut
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { string[] docIds=new string[5]{"5", "1", "4", "3", "2"}; List<Orang> orangs=new List<Orang>(); orangs.Add(new Orang(){id="1",name="Satu"}); orangs.Add(new Orang(){id="2",name="Dua"}); orangs.Add(new Orang(){id="3",name="Tiga"}); orangs.Add(new Orang(){id="4",name="Empat"}); orangs.Add(new Orang(){id="5",name="Lima"}); } } public class Orang { public string id {get;set;} public string name {get;set;} } |
Dari kode di atas urutan dari list orangs automatis akan menjadi 1,2,3,4,5 sedangkan yang diinginkan adalah 5,1,4,3,2 berdasarkan docIds
Cara 1 : Menggunakan For
Metode menggunakan perulangan for ini akan membutuhkan sebuah list Orang baru yang digunakan untuk menampung data yang terurut. Langsung lihat saja kodenya
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
List<Orang> NewOrangs=new List<Orang>(); for(int i=0;i<docIds.Length;i++) { var item= (Orang) orangs.Where(x=>x.id==docIds[i]).Single(); NewOrangs.Add(item); } foreach(Orang o in NewOrangs) { //data akan terurut 5,1,4,3,2 Console.WriteLine(o.name); } |
Cara 2 : Menggunakan Join Linq
Cara ini saya anggap agak magic, berikut kodenya
1 2 3 4 5 6 7 8 9 10 11 |
var AnotherNewOrangs=from i in docIds join o in orangs on i equals o.id select o; foreach(Orang o in AnotherNewOrangs) { //data akan terurut 5,1,4,3,2 Console.WriteLine(o.name); } |
Semoga bermanfaat 😉
Ok Sip, mantap