Dapatkah Anda menunjukkan kepada kami contoh kode yang Anda miliki, atau mengklarifikasi? Saya tidak mengikuti pertanyaan itu.
David
Saya memiliki daftar mengatakan List <String> list = new list <String> (); saya perlu mengambil sublist dari daftar ini katakanlah dari indeks 2 ke panjang-1 ..
// 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);
}
Ini adalah salinan dari segmen daftar asli, bukan tampilan atas sebagian dari daftar asli.
Asad Saeeduddin
@Asad Inti dari jawaban ini adalah untuk mengilustrasikan bahwa OP dapat menggunakan LINQ. Anda telah menunjukkan bahwa itu membuat salinan. Fantastis. Bakat Anda mungkin bisa digunakan dengan lebih baik dalam mengedit pertanyaan ini untuk mengilustrasikan poin yang bahkan lebih baik daripada yang saya tinggalkan 5,5 tahun yang lalu. Jika Anda mengeditnya, Anda akan mendapatkan kredit di liga pedantry keadilan internet, dan itu akan diterima dengan baik!
p. Campbell
11
Saya ( seperti beberapa orang lain ) sedang mencari sesuatu yang mirip dengan subListdari 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.
Asad Saeeduddin
3
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:
publicclassClient
{
publicstring 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");
Setelah Anda menjelaskan, gunakan contoh pertama saya dan tambahkan ini: z = x.GetRange (1, 3); x.RemoveRange (1, 3); x.AddRange (z.OrderByDescending (p => p));
siput
2
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.
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));
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); }
sumber
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();
sumber
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");
sumber
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.
sumber
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.
sumber
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
sumber
Range
benar dengan datatype integer. bagaimana jika tipe data Anda adalahDataTime
dan Anda perlu mengambil daftar rekaman antara dua tanggal tertentu?