IList<T>
üzerinde çalışan bir Java List.subList()
.NET eşdeğeri var mı? Genel List<T>
için, GetRange(int, int)
yöntemi bu.NET'in Java's List.subList() eşdeğeri?
cevap
olduğunu 42, 7 yazdırır: Kamarey işaret ettiği gibi, bir salt okunur manzarasına sahip olabilir LINQ
list.Skip(fromRange).Take(toRange - fromRange)
.
Düzenleme: bunun, orijinalde 'görünüm' değil, sığ bir kopya olduğunu unutmayın. Bence C# bu işlevselliği sunuyor.
Edit2:
List<int> integers = new List<int>() { 5, 6, 7, 8, 9, 10, 11, 12 };
IEnumerable<int> view = integers.Skip(2).Take(3);
integers[3] = 42;
foreach (int i in view)
// output
yukarıda
MSDN belgelerinden (http://msdn.microsoft.com/en-us/library/21k0e39c.aspx) aynı görünmüyor: subList() bir görünüm döndürürken, GetRange() sığ bir kopya döndürür (örn. subList() 'e yapılan değişiklikler orijinal listeye yansıtılacaktır!) –
Tamam haklısınız. Bunun tam olarak gerekli olup olmadığından emin değilim, ancak cevabımı yansıtacak şekilde düzenlerim. – Razzie
GetRange
9. kullanarak cevap
Tekrar: Tam olarak aynı şey değil, görünüm yerine sığ bir kopya döndürdüğü için. Bir görünümü döndürmek, bazı güzel şık hileler (örneğin, bir RemoveRange() yöntemi sağlamak için gereksiz hale getirir, çünkü list.subList (x, y) .clear()) olarak kolayca yazılabilir. –
Dürüst olmak gerekirse, faydaları gerçekten görmediğimi söylemeliyim. Ayrıca, removeRange() ve subList.clear(), aynı şey gibi görünmez, çünkü temizleme bir aralığın kaldırılmasıyla aynı olmamalıdır. Ama oh iyi :-) – Razzie
SubList() öğesinin orijinal Listeye bir görünüm döndürdüğü (ve bir kopyasını değil) kavramı okşadığınız anda, someList.subList (1,3) .clear() öğesinin belirgin olacağı aşikar olacaktır. Orijinal Listeden nesneleri kaldırın. Ve en önemli kısmı, daha iyi veya değil, değil, ama subList() ve GetRange() aynı şeyi yapmazlar, bu yüzden eşdeğer olarak sunulmamalıdırlar (en azından bir feragatname olmadan). –
Bu, orijinal Listeye veya aralığın bir kopyasına bir görünüm kazandırır mı? –
Sadece listede değil, IList üzerinde çalışıyor, aradığım şey buydu. – ripper234
@Joachim Sauer: Bu bir sorgudur ve sonuç nasıl değerlendirildiğine bağlıdır. Değerlendirirken, bir kural uygulayan liste öğeleri arasında dolaşır. Bu, Java'nın subList işlevi için doğrudan analog değildir ve bu durumda bunları karşılaştırmak yanlıştır. – Kamarey