如何从 List<string> 中删除零元素?

How to remove zero elements from List<string>?

阅读了几个示例,但似乎我做错了什么。 需要在不使用哈希表的情况下从巨大的列表中删除所有“0”字符串。

尝试使用 Stack Owerflow 和 MSDN 示例中的 lambda 样本,但看起来我搞砸了。

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);

我有一个包含 4000 个字符串元素的 pagesExist 列表。 假设

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

将累积列表中的所有零,并将在下一个字符串中删除它们。但不知何故找到了 0 个元素的结果

您可以使用 RemoveAll :

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

无需创建 pagesExist 列表。只需使用简单的 linq query over the DataTable 过滤掉所有非零行。这样你的整个代码就减少到只有:

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

我假设该列仅包含整数。如果不是,则继续使用 Field<string> 并过滤 != "0".


作为旁注,我建议您查看 SqlGetTable。如果它 returns a DataTable 它已经将所有这些数据从数据库带入内存,使用 linq-2-sql 或 linq 等工具直接在 DBMS 上使用 linq 可以避免这种情况-2-实体