Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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# 在C中构造唯一对象列表的最佳方法#_C#_Performance_Generic List - Fatal编程技术网

C# 在C中构造唯一对象列表的最佳方法#

C# 在C中构造唯一对象列表的最佳方法#,c#,performance,generic-list,C#,Performance,Generic List,我想知道在C#中,遵循一种模式还是另一种模式来构建唯一的对象列表会更快: 选择1 将所有项目添加到通用列表中 调用list.Distinct函数 选择2 迭代每个项目 检查列表中是否已存在该项,如果不存在,则添加该项 如果您担心查找独特项目的性能,请使用。此外,字典需要唯一的键,因此您永远不会有重复的键。您可以使用: HashSet类提供高性能的set操作。一套 是不包含重复元素的集合,并且 元素没有特定的顺序 您可以通过构造器提供定制。这是一个“我应该用鞋还是用砖把钉子钉进木头里”的问题

我想知道在C#中,遵循一种模式还是另一种模式来构建唯一的对象列表会更快:

选择1

  • 将所有项目添加到通用列表中
  • 调用list.Distinct函数
选择2

  • 迭代每个项目
  • 检查列表中是否已存在该项,如果不存在,则添加该项

如果您担心查找独特项目的性能,请使用。此外,字典需要唯一的键,因此您永远不会有重复的键。

您可以使用:

HashSet类提供高性能的set操作。一套 是不包含重复元素的集合,并且 元素没有特定的顺序

您可以通过构造器提供定制。

这是一个“我应该用鞋还是用砖把钉子钉进木头里”的问题。您应该为作业使用适当的数据结构,该结构基于类满足的“构建唯一对象列表”的要求


如果您需要列表格式的项目,您可以随时在集合上调用
ToList()

谢谢,尽管它是来自MSDN的引用。
HashSet
实际上不是列表,它不保留顺序,也不提供索引访问。(OP似乎也没有意识到区别。)@DavidMoles确实
HashSet
不是
列表。似乎OP根本不知道
HashSet
,所以这就是为什么我提出它作为解决方案的原因。因此,我认为,我们可以假设单词“list”(在本例中)的意思是项目的集合。实际上,它是一个.a
HashSet
实际上不是一个列表——它不保留顺序,也不提供索引访问。(OP似乎也没有意识到区别。)根据描述,他没有键值关系,因此他需要一个集合(比如
HashSet
),而不是Map(C#中的一个实现是
字典),事实上,我忘了HashSet。