我正在寻找一种从字符串列表中删除空字符串值的更有效方法。
下面的代码可以工作,但是对于非常大的数据集,这似乎效率很低。有更有效的方法吗?
仅供参考-刚开始只是建立一个数据集,使其具有包含空字符串的列表的列表
public static void Main()
{
//Building the data set
List<List<string>> list = new List<List<string>>();
list.Add(new List<string> {"One", "Two", "", "Eight"});
list.Add(new List<string> {"Three", "Five", "Six"});
list.Add(new List<string> {"Sixteen", "", ""});
list.Add(new List<string> {"Twenty-Eight", "Forty", "Nine"});
//Create an empty List of a List
List<List<string>> newList = new List<List<string>>();
//Loop through the original list and purge each list of empty strings
for(int i = 0; i < list.Count; i++) {
newList.Add(list[i].Where(x => !string.IsNullOrEmpty(x)).ToList());
}
foreach (var s in newList) {
Console.WriteLine(string.Join(", ", s));
}
/*
CORRECT OUTPUT:
"One", "Two", "Eight"
"Three", "Five", "Six"
"Sixteen"
"Twenty-Eight", "Forty", "Nine"
*/
}
答案 0 :(得分:6)
为什么不使用List<T>.RemoveAll()方法?定义:
删除所有与指定谓词定义的条件相匹配的元素。
{"name": "field12", "type": "string"}
这就是您所需要的。其他答案有foreach (var l in list)
{
l.RemoveAll(x => string.IsNullOrEmpty(x));
}
和两次Select().Where()
,对于像这样的简单操作来说,这是过多的开销。
答案 1 :(得分:2)
newList = list.Select(t=>t.Where(q=>!string.IsNullOrEmpty(q)).ToList()).ToList();
答案 2 :(得分:1)
由于您希望返回List<List<string>>
,所以只需Select
并使用Where
过滤内部列表
public List<List<string>> FilterStrings()
{
List<List<string>> list = new List<List<string>>();
list.Add(new List<string> { "One", "Two", "", "Eight" });
list.Add(new List<string> { "Three", "Five", "Six" });
list.Add(new List<string> { "Sixteen", "", "" });
list.Add(new List<string> { "Twenty-Eight", "Forty", "Nine" });
return list.Select(lst => lst.Where(str => !string.IsNullOrEmpty(str)).ToList()).ToList();
}
答案 3 :(得分:0)
主要思想:遍历列表并从列表中删除空字符串。
list.Select(outerListItem =>
outerListItem.Where(innerListItem =>
!string.IsNullOrEmpty(innerListItem).ToList())