2012-03-13 4 views
2

Я уверен, что это не сложно для вас, но у меня проблемы с мышлением прямо сегодня. У меня есть коллекция списков, которые я приобрел, используя этот LINQ код:Удалить товар из коллекции списков

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (f => f.ToString().Contains("Not available")) 
.Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)) 
.ToList(); 

Результаты:

List1:

"GCE" 
Not available 
"" 
"RES" 
9.97000000 
9.99000000 

List2:

"WRK.UN" 
Not available 
"" 
"INT" 
16.22000000 
16.22000000 

Мой вопрос как я могу сохранить свою коллекцию списков, но исключить третий элемент в каждом из этих списков? Легче ли создать новый список или просто удалить элемент? Итак, моя коллекция окончания списков должна выглядеть следующим образом:

List1:

"GCE" 
Not available 
"RES" 
9.97000000 
9.99000000 

List2:

"WRK.UN" 
Not available 
"INT" 
16.22000000 
16.22000000 

Спасибо заранее.

ответ

1

Благодаря & @Carsten @ Тим для указателей. Вот обновленный код:

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (line => line.Contains("Not available")) 
.Select(line => 
    line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries) 
    .Where((col, index) => index!=2)) 
.ToList(); 
3

Вы можете использовать этот Where -Overload сделать это:

.Where ((f, index) => index != 2 && f.ToString().Contains("Not available")) 
+0

Я предполагаю, что это не третья строка, а третья колонка в каждой строке, которую он хочет пропустить. Итак, это «где» слишком рано. –

+1

Возможно, вы были правы - смотрели только на примеры (не очень понятно) - в этом случае вам нужно было бы разместить подобное. Где внутри следующего Select - я не думаю, что это большое дело) – Carsten

+0

Спасибо за указатель. Это сделал трюк. –

0

Поскольку вы всегда хотите удалить только третий элемент в списке, вы можете использовать List1.RemoveAt (2) и (List2.RemoveAt 2) удалить третий элемент из списка.

3

Вы можете использовать индексацию в Where, чтобы пропустить его:

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (line => line.Contains("Not available")) 
.Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)) 
.Where((col, index) => index!=2) 
.ToList(); 
+0

Ваш код доставил мой List2 полностью. Я просто хочу удалить третий элемент в каждом из этих списков. –

+0

Спасибо @Tim. Наряду с предложением Карстен я смог более эффективно использовать ваш код. Я вставил правильный код. –

Смежные вопросы