Saya punya List<String>
dan saya perlu mengeluarkan sublist dari daftar ini. Apakah ada metode Daftar yang tersedia untuk ini di .NET 3.5?
Saya punya List<String>
dan saya perlu mengeluarkan sublist dari daftar ini. Apakah ada metode Daftar yang tersedia untuk ini di .NET 3.5?
Jawaban:
Anda ingin List :: GetRange (firstIndex, count). Lihat http://msdn.microsoft.com/en-us/library/21k0e39c.aspx
// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)
Itukah yang kamu cari?
Jika Anda ingin menghapus item sublist dari daftar asli, Anda dapat melakukan:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Apakah semudah menjalankan kueri LINQ di Daftar Anda?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
subList
dari Java, yang memperlihatkan tampilan yang bisa berubah ke dalam daftar asli. Ini berperilaku berbeda, yang mungkin tidak langsung terlihat, jadi saya pikir akan sangat membantu untuk menunjukkannya untuk kepentingan siapa pun yang melihatnya nanti. Di luar topik, Anda mungkin ingin mengikuti yoga atau meditasi atau semacamnya; Anda menjadi 0 menjadi merah di wajah gila tanpa provokasi apapun.
Gunakan klausa Where dari LINQ:
List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");
var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");
Dalam pernyataan di atas, "p" adalah objek yang ada dalam daftar. Jadi jika Anda menggunakan objek data, yaitu:
public class Client
{
public string Name { get; set; }
}
maka linq Anda akan terlihat seperti ini:
List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });
var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");
Dengan LINQ:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Jika Anda membutuhkan foreach, maka tidak perlu ToList:
foreach (string s in l.Skip(1).Take(2)){}
Keuntungan LINQ adalah jika Anda ingin melewatkan beberapa elemen utama, Anda dapat:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
yaitu tidak perlu memperhatikan hitungan / panjang, dll.
Kelas koleksi Anda bisa memiliki metode yang mengembalikan koleksi (sublist) berdasarkan kriteria yang diteruskan untuk menentukan filter. Buat koleksi baru dengan foreach loop dan bagikan.
Atau, minta metode dan perulangan memodifikasi koleksi yang ada dengan menyetel tanda "difilter" atau "aktif" (properti). Yang ini bisa berfungsi tetapi juga bisa menyebabkan poblems dalam kode multithread. Jika objek lain bergantung pada konten koleksi, ini baik atau buruk tergantung cara Anda menggunakan data.
Balikkan item dalam sub-daftar
int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));
Memberikan 0,1,4,3,2,5,6
Range
benar dengan datatype integer. bagaimana jika tipe data Anda adalah DataTime
dan Anda perlu mengambil daftar rekaman antara dua tanggal tertentu?