我想从C#中的List中删除所有空值,我想知道哪些更有效,为什么?
选项#1:
myList.RemoveAll(item => item == null);
选项#2:
myList = myList.Where(x => x != null).ToList();
谢谢!
答案 0 :(得分:3)
这两种方法的语义非常不同:
myList
被改变的意义上,而List
。您的代码也会丢弃原始代码,但不需要这样做。去除元素的两种方式都具有O(n)时间复杂度。第二种方式需要创建新的List
,而第一种方式可能需要复制列表的“尾部”。总的来说,当您保留的物品数量与您丢弃的物品数量相似时,您应该会看到相当类似的性能。
当第一种方法明确获胜时,一种情况是所有项目都是非空的,在这种情况下,该方法不执行复制或重新分配。如果您希望在大多数情况下搜索null
失败,请使用第一种方法。
答案 1 :(得分:0)
我会说第一个。主要是因为2个原因。
.ToList()
。基本上,您正在创建一个新列表,这需要花费大量资源。