Как удалить ноль элементов из списка <string>? - PullRequest
2 голосов
/ 11 апреля 2019

Прочитайте пару примеров, но, кажется, я делаю что-то не так.Необходимо удалить все строки «0» из ОГРОМНОГО списка без использования хеш-таблиц.

Пробовал использовать лямбда-сэмплы из примеров Stack Owerflow и MSDN, но, похоже, я что-то напутал.

DataTable book = SQL.SqlGetTable(BookList.SelectedItem.ToString());
List<string> pagesExist = new List<string>();
for (int i = 0; i < book.Rows.Count; i++)
{
    pagesExist.Add(book.Rows[i][0].ToString());
}

var found = pagesExist.Find(x => x == "0");
if (found != null) 
    pagesExist.Remove(found);

У меня есть pagesExist список из 4000 строковых элементов.Предполагается, что

var found = pagesExist.Find(x => x == "0"); 

накапливает все нули в списке и удаляет их в следующей строке.Но как-то найдено результатов в 0 элементах

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Нет необходимости создавать список pagesExist. Просто отфильтруйте все ненулевые строки с помощью простого запроса l inq над DataTable. Таким образом, весь ваш код уменьшается до:

DataTable book = SQL.SqlGetTable(BookList.SelectedItem.ToString());
var result = book.AsEnumerable().Where(r => r.Field<int>("FieldName") != 0);

Я предполагаю, что столбец содержит только целые числа. Если нет, то оставьте значение Field<string> и фильтр для != "0".


В качестве примечания я бы рекомендовал изучить SqlGetTable. Если он возвращает DataTable, он уже переносит все эти данные в память из базы данных, чего можно избежать, используя linq непосредственно над СУБД, используя такие инструменты, как linq-2-sql или linq-2-entity

2 голосов
/ 11 апреля 2019

Вы можете использовать RemoveAll :

pagesExist.RemoveAll(p => p == "0");
...