SORU
17 EKİM 2009, CUMARTESİ


Nasıl üzerinde yineleme sırasında genel bir listeden öğeleri kaldırmak için?

Bir daha arıyorumdesenher işlemden sonra bağlı olarak gereken öğelerin bir listesi ile çalışmak için sonuç listesinden kaldırılır.

Sen bir insan değilsin .Remove(element) içinde foreach (var element in X) (çünkü sonuçlar Collection was modified; enumeration operation may not execute. hariç)... sen de insan değilsin for (int i = 0; i < elements.Count(); i ) .RemoveAt(i) çünkü bozar bulunduğunuz pozisyonda toplama göre i.

Zarif bir şekilde bunu yapmak için var mı?

CEVAP
17 EKİM 2009, CUMARTESİ


Döngü: bir ile ters listenize yineleme

for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // some code
    // safePendingList.RemoveAt(i);
}

Örnek:

var list = new List<int>(Enumerable.Range(1, 10));
for (int i = list.Count - 1; i >= 0; i--)
{
    if (list[i] > 5)
    	list.RemoveAt(i);
}
list.ForEach(i => Console.WriteLine(i));

Alternatif olarak, karşı test etmek için bir yüklem ile RemoveAll method kullanabilirsiniz:

safePendingList.RemoveAll(item => item.Value == someValue);

Burada göstermek için basit bir örnek:

var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AginoEvolutionHD

    AginoEvoluti

    27 AĞUSTOS 2011
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011