从列表中删除零值会更有效



我想从c#中的列表中删除所有空值,我想知道什么会更有效,为什么?

选项#1:

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

选项#2:

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

谢谢!

这两种方法在其语义上非常不同:

  • 第一种方法是"破坏性的",从某种意义上说myList,而
  • 第二种方法是"无损",因为创建了新的List。您的代码还丢弃了原件,但不需要。

删除元素的两种方式都具有O(n)时间复杂性。第二种方法需要创建新的List,而第一种方式可能需要复制列表的"尾巴"。总体而言,当您保留的项目数与您丢弃的项目数量相似时,您应该看到相似的性能。

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

我会说第一个。主要是由于两个原因。

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

相关内容

  • 没有找到相关文章

最新更新