我值(100-200字符串)的大名单,我需要回到他们的不同上市。什么是最有效的方式做到这一点使用.NET?我能想到的2种方式是:

  1. 使用了IEnumerable类
  2. 的独特()方法
  3. 使用一个字典
  4. 如果在字典的方法是使用原始术语更快,考虑周围的代码的可维护性的权衡决定。

有帮助吗?

解决方案

我希望Enumerable.Distinct约为尽可能快地使用字典,如果你只是做一次。如果您希望能够添加/删除值,并保持明显的烦躁,你可以建立一个HashSet<string>(这基本上是我所期望鲜明的引擎盖下是干什么的,但是,当它发现他们Distinct()显然会返回新值,保持顺序。

在事实上,仅仅使用:

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

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

(与以往一样,我建议首先找到最可读的解决方案,以及基准它 - 如果它是“不够快”,然后与去如果你想用这个作为另一个查询的一部分,那么Distinct很可能是最可读的方式,否则,我建议HashSet。)

其他提示

我想亲自去与LINQ提供的鲜明()方法。它更容易阅读和维护。虽然使用LINQ会比使用字典的差异会很小(在情况下,你已经列出)和你最好花时间优化数据库查询或Web服务调用速度较慢。

我会siggest你在这儿用分析。生成与样本项目的列表,排序它说用1M次左右逢源,并测量以各种方式使用的时间。

如果可读性是一个问题,创建一个GetDistinctItems方法,把你的代码里面:瞧,自我记录的代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top