我有一个很大的值列表(100-200个字符的字符串),我需要返回一个明确的列表。使用.NET执行此操作的最有效方法是什么?我能想到的两种方式是:
如果字典方法的原始速度更快,请考虑围绕代码的可维护性做出权衡决定。
答案 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à,自编代码。