如何从 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-实体
阅读了几个示例,但似乎我做错了什么。 需要在不使用哈希表的情况下从巨大的列表中删除所有“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-实体