c# - 从列表中删除空值会更有效吗?

时间:2017-12-09 16:11:05

标签: c# list lambda null expression

我想从C#中的List中删除所有空值,我想知道哪些更有效,为什么?

选项#1:

myList.RemoveAll(item => item == null);

选项#2:

myList = myList.Where(x => x != null).ToList();

谢谢!

2 个答案:

答案 0 :(得分:3)

这两种方法的语义非常不同:

  • 第一种方法是“破坏性的”,在myList被改变的意义上,而
  • 第二种方法是“非破坏性的”,因为创建了新的List。您的代码也会丢弃原始代码,但不需要这样做。

去除元素的两种方式都具有O(n)时间复杂度。第二种方式需要创建新的List,而第一种方式可能需要复制列表的“尾部”。总的来说,当您保留的物品数量与您丢弃的物品数量相似时,您应该会看到相当类似的性能。

当第一种方法明确获胜时,一种情况是所有项目都是非空的,在这种情况下,该方法不执行复制或重新分配。如果您希望在大多数情况下搜索null失败,请使用第一种方法。

答案 1 :(得分:0)

我会说第一个。主要是因为2个原因。

  1. 更容易阅读。
  2. 您不必致电.ToList()。基本上,您正在创建一个新列表,这需要花费大量资源。