c# - 从字符串列表中获取不同且有序的成员 - linq 或 hashset for unique 哪个更快/更适合

标签 c# linq optimization hashset

我有一个很大的字符串列表(大约 5k-20k 个条目),我需要对其进行排序并从中删除重复项。

我现在用 2 种方法完成了这项工作,一次使用哈希集,一次仅使用 linq。使用该数量的条目进行的测试并没有显示出很大的差异,但我想知道哪种方式以及哪种方法更适合。

对于方法(myList的数据类型为List):

Linq:我正在使用 1 条 linq 语句对列表进行排序并从中获取不同的值。

myList = myList.OrderBy(q => q).Distinct().ToList();

Hashset:我正在使用 hashset 删除所有重复项,然后对列表进行排序

myList = new HashSet<String>(myList).ToList<String>();
myList = myList.OrderBy(q => q).ToList();

就像我说的那样,我所做的测试对两种方法消耗的时间大致相同,但我仍然想知道一种方法是否比另一种方法更好,如果是这样,为什么(代码是针对高性能部分的,我需要得到每一毫秒我都可以摆脱它)。

最佳答案

如果你真的关心每一纳秒,那么

myList = myList.Distinct().OrderBy(q => q).ToList();

可能略快于:

myList = myList.OrderBy(q => q).Distinct().ToList();

如果有大量重复。

LINQ 方法更具可读性,并且与显式创建 HashSet<T> 具有相似的性能正如其他人所说。事实上,如果原始 List 已经排序,它可能会稍微快一些,因为 LINQ 方法将在排序前保留初始顺序,同时显式创建 HashSet<T>。将以未定义的顺序枚举。

关于c# - 从字符串列表中获取不同且有序的成员 - linq 或 hashset for unique 哪个更快/更适合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421213/

相关文章:

linq - 如何使用 LINQ 返回国家列表,但将特定国家任意放置在顶部?

c# - 如果值匹配,则从另一个字符串数组获取字符串

mysql - SQL 查询长度的实际限制(特别是 MySQL)

c++ - 这会累积多少浮点错误?

C# 任务工厂超时

c# - 指定日期时间的时区而不更改值

c# - 数组作为 LINQ 查询中的搜索参数

C# 将标志枚举类型变量中的设置标志转换为整数数组

c# - WCF DataContracts - 如何将单个 DataContract 与复杂对象一起用于 WCF SOAP 和 REST 服务?

c++ - 三元运算符 vs if 语句 : compiler optimization