1

我有一个大的值列表(100-200 个字符串),我需要返回它们的不同列表。使用 .NET 最有效的方法是什么?我能想到的两种方法是:

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

如果字典方法在原始方面更快,请考虑围绕代码的可维护性做出权衡决定。

4

3 回答 3

7

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

实际上,只需使用:

HashSet<string> distinctItems = new HashSet<string>(list);

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

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

于 2009-11-13T08:36:59.607 回答
2

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

于 2009-11-13T08:33:35.783 回答
1

我建议你在这里使用分析。生成一个包含示例项目的列表,使用两种方式对其进行排序 1M 次,并测量每种方式使用的时间。

如果可读性是一个问题,请创建一个GetDistinctItems方法并将您的代码放入其中:voilà,自我记录的代码。

于 2009-11-13T08:31:45.187 回答