什么是创建一个使用.NET的项目的不同列表的最有效方法是什么?
-
19-09-2019 - |
题
我值(100-200字符串)的大名单,我需要回到他们的不同上市。什么是最有效的方式做到这一点使用.NET?我能想到的2种方式是:
- 使用了IEnumerable类 的独特()方法
- 使用一个字典 醇>
如果在字典的方法是使用原始术语更快,考虑周围的代码的可维护性的权衡决定。
解决方案
我希望Enumerable.Distinct
约为尽可能快地使用字典,如果你只是做一次。如果您希望能够添加/删除值,并保持明显的烦躁,你可以建立一个HashSet<string>
(这基本上是我所期望鲜明的引擎盖下是干什么的,但是,当它发现他们Distinct()
显然会返回新值,保持顺序。
在事实上,仅仅使用:
HashSet<string> distinctItems = new HashSet<string>(list);
将是一个不错的(简单的)解决方案,如果你不介意的排序被搞砸了。这比使用Dictionary
简单,概念上更清洁,以及(如你不这样做的真正的要键映射到值)。
(与以往一样,我建议首先找到最可读的解决方案,以及基准它 - 如果它是“不够快”,然后与去如果你想用这个作为另一个查询的一部分,那么Distinct
很可能是最可读的方式,否则,我建议HashSet
。)
其他提示
我想亲自去与LINQ提供的鲜明()方法。它更容易阅读和维护。虽然使用LINQ会比使用字典的差异会很小(在情况下,你已经列出)和你最好花时间优化数据库查询或Web服务调用速度较慢。
我会siggest你在这儿用分析。生成与样本项目的列表,排序它说用1M次左右逢源,并测量以各种方式使用的时间。
如果可读性是一个问题,创建一个GetDistinctItems
方法,把你的代码里面:瞧,自我记录的代码
不隶属于 StackOverflow