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

时间:2009-11-13 08:27:58

标签: .net sorting ienumerable distinct-values

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

  1. 使用IEnumerable类的Distinct()方法
  2. 使用词典
  3. 如果字典方法的原始速度更快,请考虑围绕代码的可维护性做出权衡决定。

3 个答案:

答案 0 :(得分:7)

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

事实上,只需使用:

HashSet<string> distinctItems = new HashSet<string>(list);
如果您不介意排序混乱,

将是一个非常好(和简单)的解决方案。它比使用Dictionary更简单,并且在概念上也更简洁(因为你没有真的想要将键映射到值)。

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

答案 1 :(得分:2)

我个人会使用LINQ提供的Distinct()方法。它的阅读和维护要容易得多。虽然使用LINQ会比使用字典慢,但差别很小(在您列出的情况下),您最好花时间优化数据库查询或Web服务调用。

答案 2 :(得分:1)

我想让你在这里使用分析。生成包含样本项的列表,使用两种方式对其进行1M次排序,并测量每种方式使用的时间。

如果需要考虑可读性,请创建一个GetDistinctItems方法并将代码放入其中:voilà,自编代码。