2009-11-13 32 views
1

我有一个大的值列表(100-200字符的字符串),我需要返回一个不同的列表。什么是最有效的方式来使用.NET来做到这一点?我能想到的2种方式是:什么是使用.NET创建不同项目列表的最有效方式?

  1. 使用了IEnumerable类的独特()方法
  2. 使用字典

如果字典的方法是在原料方面更快,考虑权衡代码的可维护性的决定。

回答

7

我认为Enumerable.Distinct与使用字典一样快,如果你只做一次。如果你想能够添加/删除值和保持鲜明度,你可以建立一个HashSet<string>(这基本上是我期望Distinct在底层做的,但Distinct()显然会返回新值,因为它发现它们,维护为了

其实,只是用:

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

将是一个不错的(简单的)解决方案,如果你不介意的排序被搞砸这比使用Dictionary简单,概念上。清洁以及(因为你不真的想要映射键值)

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

1

我会证明你在这里使用分析。用示例项目生成一个列表,使用两种方法对它进行排序,并测量每种方式使用的时间。

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

2

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

相关问题