使用.NET创建不同项目列表的最有效方法是什么?

Qwe*_*rty 1 .net sorting ienumerable distinct-values

我有一个很大的值列表(100-200个字符串),我需要返回一个明确的列表.使用.NET执行此操作的最有效方法是什么?我能想到的两种方式是:

  1. 使用IEnumerable类的Distinct()方法
  2. 使用字典

如果字典方法的原始速度更快,请考虑围绕代码可维护性的权衡决策.

Jon*_*eet 7

Enumerable.Distinct如果你只做一次,我希望和使用字典一样快.如果你想能够添加/删除值并保持清晰度,你可以构建一个HashSet<string>(这基本上是我期望Distinct在幕后做的,但Distinct()显然会在找到它们时返回新值,维持秩序.

实际上,只需使用:

HashSet<string> distinctItems = new HashSet<string>(list);
Run Code Online (Sandbox Code Playgroud)

如果你不介意排序混乱,那将是一个非常好(和简单)的解决方案.它比使用a更简单Dictionary,并且在概念上也更简洁(因为你真的不想将键映射到值).

(与以往一样,我建议首先找到最易读的解决方案,然后对其进行基准测试 - 如果它"足够快",那么请继续使用.如果你想将它作为另一个查询的一部分,那么Distinct可能是最易读的方法.否则,我建议HashSet.)