2013-04-15 18 views
7

Powiedz, że mam listę 10 elementów.Jak uzyskać wszystkie elementy z wyjątkiem n-tego elementu na liście przy użyciu Linq

List<char> chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; 

muszę nową listę zawierającą wszystkie elementy listy z wyjątkiem n'th (powiedzmy, 3 artykuł 'C'). Nie chcę, aby oryginalna lista została zmieniona, ponieważ potrzebuję jej później.

Inną opcją jest to, że mogę sklonować listę i usunąć przedmiot, ale wszystkie przedmioty po n-tym muszą zostać przesunięte w górę.

Czy istnieje sposób na uzyskanie listy przy użyciu Linq?

Edit:

Postać może występować wiele razy na liście. Chcę usunąć tylko zdarzenie przy "n".

+0

Wierzę, że można użyć 'chars.Take (2) .Concat (chars.Skip (3))' ale naprawdę nie wiem na pewno ... – Nolonar

+1

Zwraca prawidłowy wynik, ale będzie iterować przez lista dwa razy. – ManojRK

Odpowiedz

16

Jasne, używając overload of Where która pobiera parametr index:

var allBut3 = chars.Where((c, i) => i != 2); // use 2 since Where() uses 0-based indexing 
0

Można użyć Enumerable.Where metody.

Filtruje sekwencję wartości na podstawie predykatu.

List<char> chars = new List<char>(){'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; 
var newlist = chars.Where(n => n != chars.ElementAtOrDefault(2)); 

Oto DEMO.

Powiązane problemy