Usunięcie z listy elementu

0

Witam, czy takie rozwiązanie jest poprawne?
Mam listę typu int w której są liczby od 0 do 1000. Chcę aby z tej listy usunięto liczby większe od 100.
Czy poniższe rozwiązanie jest dobre?
załóżmy że lista jest już wypełniona

List<int> liczby = new List<int>();
foreach(var i in liczby){
if(i>100){
liczby.Remove(i);
}
}
0

A odpalałeś to w ogóle w tej pętli foreach? Sprawdzałeś chociaż czy działa?

            var list = new List<int> { 1, 2, 3, 4, 5, 3, 4, 5, 6 };
            list.RemoveAll(n => n > 4);
            foreach (var i in list)
            {
                Console.WriteLine(i);
            }
0

właśnie nie działa.
ma ktoś pomysł?

1

W foreachu nie powinno się usuwać elementów (ani też dodawać), bo modyfikujesz coś na czym się już kręcisz.
Rozwiązanie powyższe jest poprawne (używając linq).
Ewentualnie użyj pętli for do tego

0

a jak to zrobić za pomocą linq?

0

a tak można? po kompilacji niby działa

for (int i=0; i<liczby.Count; i++) 
            {
                if (liczby[i] > 100)
                {
                    liczby.Remove(liczby[i]);
                    i--;

                }
            }
0

O_o Przecież dostałeś rozwiązanie na tacy, poza tym jak już jedziesz usuwanie za pomocą for to jedź od końca.

0

a jak to zrobić za pomocą linq?

var list = new List<int>() { 4, 39, 399, 263, 53, 20 };
list.RemoveAll(x => x > 100);
1

Ludzie jakie Linq? RemoveAll jest to metoda klasy List<T>: https://msdn.microsoft.com/en-us/library/wdka673a(v=vs.110).aspx

@kamilm758 masz dobre rozwiązanie. To nie jest rocket science. Wyrażenia lambda są w tej chwili podstawą C# i radzę Ci opanować je jak najszybciej. Zresztą są tak wygodne, że nie wyobrażam sobie życia bez nich :P

2

@Sarrus: no właśnie miałem to napisać. Ludzie myślą, że wszystko co przyjmuje lambdę to LINQ. A tymczasem LINQ jak sama nazwa wskazuje służy do odpytywania, a nie modyfikacji danych.

Rozwiązanie z LINQ:

var nowaLista = lista.Where(x => x <= 100).ToList();

1 użytkowników online, w tym zalogowanych: 0, gości: 1