Удалить элемент из коллекции списков - PullRequest
2 голосов
/ 13 марта 2012

Я почти уверен, что это не сложно для вас, гуру, но сегодня мне трудно думать прямо.У меня есть коллекция списков, которые я приобрел, используя этот код 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();

Результаты:

Список1:

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

Список2:

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

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

List1:

"GCE" 
Not available
"RES"
9.97000000
9.99000000

List2:

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

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 13 марта 2012

Вы можете использовать индексатор в 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();
3 голосов
/ 13 марта 2012

Вы можете использовать это Где -Загрузить, чтобы сделать это:

.Where ((f, index) => index != 2 && f.ToString().Contains("Not available"))
1 голос
/ 13 марта 2012

Спасибо @Tim & @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();
0 голосов
/ 13 марта 2012

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

...