Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串列表中获取不同且有序的成员-linq或hashset,以确定哪一个更快/更适合_C#_Linq_Optimization_Hashset - Fatal编程技术网

C# 从字符串列表中获取不同且有序的成员-linq或hashset,以确定哪一个更快/更适合

C# 从字符串列表中获取不同且有序的成员-linq或hashset,以确定哪一个更快/更适合,c#,linq,optimization,hashset,C#,Linq,Optimization,Hashset,我有一个很大的字符串列表(大约5k-20k个条目),我需要对这些字符串进行排序并从中删除重复项 我现在已经用两种方法完成了,一种是使用哈希集,另一种是单独使用linq。有这么多条目的测试并没有显示出很大的差异,但我想知道哪种方法以及哪种方法更适合 对于方法(myList是数据类型列表的一部分): Linq:我使用1个Linq语句对列表进行排序,并从中获取不同的值 myList = myList.OrderBy(q => q).Distinct().ToList(); 哈希集:我使用哈希集

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


我现在已经用两种方法完成了,一种是使用哈希集,另一种是单独使用linq。有这么多条目的测试并没有显示出很大的差异,但我想知道哪种方法以及哪种方法更适合

对于方法(myList是数据类型列表的一部分):

Linq:我使用1个Linq语句对列表进行排序,并从中获取不同的值

myList = myList.OrderBy(q => q).Distinct().ToList();
哈希集:我使用哈希集删除所有重复项,然后对列表排序

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

正如我所说,我所做的两种方法的时间消耗几乎相同,但我仍然想知道一种方法是否比另一种好,如果是,原因是什么(代码是用于高性能部分的,我需要从中获得每一毫秒)。

它们基本相同
Distinct
还使用
Set
消除重复项。我的建议是先使用
不同的
,然后对项目进行排序。同样在第二个代码中,
ToList
调用是多余的,您可以在
HashSet
上使用
OrderBy
,然后调用
ToList
,如果您真的关心每一纳秒,那么

myList = myList.Distinct().OrderBy(q => q).ToList();
可能略快于:

myList = myList.OrderBy(q => q).Distinct().ToList();
如果存在大量重复项


LINQ方法更具可读性,并且与其他人所说的显式创建
HashSet
具有类似的性能。事实上,如果原始列表已经排序,它可能会稍微快一点,因为LINQ方法将在排序之前保留初始顺序,而显式创建
哈希集
将以未定义的顺序枚举。

“使用该数量的条目的测试并没有显示出很大的差异”-您期望(很大程度上)吗在可预见的未来,不同数量的条目?无论如何,我认为
Linq
语句看起来更具可读性。可能先是
Distinct()
,然后是
OrderBy()
。我计算的是我当前数字的10倍,作为完整的最大值。为了使linq语句可读性更好,这里也是一样。你能通过在开始(或结束)添加
“1”
“9”
来推断测试数据吗对于每个字符串?使用
SortedSet
怎么样?默认情况下,它是唯一的并排序的见我不知道这是否比添加项目后的排序快,但也许您可以将其添加到测试中并进行检查。@Thomas:如果它们都执行类似/相同的操作,那么选择可能更基于为正确的作业使用正确的类型。如果
SortedSet
做了您需要的事情,那么它可能是一个不错的选择,而不是在上面使用LINQ?这一点很好。因此,实际上,这两种方法中使用哪一种并不重要,因为两者都是以相同的方式进行的(在我的测试中,无论使用哪种方法,每次尝试都会有很大的差异,可能需要1.4-2.3秒,这几乎不可能判断两种方法中的一种是否真的更快)。