C#字典vs列表用法

时间:2013-05-28 22:01:14

标签: c# list dictionary hashtable

我有两个问题。我想知道在C#库中是否有一个简单的类来存储值对而不是一个,这样我就可以在列表的同一节点中存储一个类和一个整数。我认为最简单的方法是创建一个容器类,但每次都是额外的工作。我想知道我是否应该这样做。我知道在.NET的更高版本(我使用的是3.5)中,我可以存储有元组,但是我无法使用。

我想更大的问题是使用字典存储整数类映射的内存缺点是什么,即使我不需要在O(1)中访问并且只能搜索列表?哈希表的最小大小是多少?我应该制作我需要的包装类吗?

5 个答案:

答案 0 :(得分:6)

如果您需要存储{integer, value}的无序列表,那么我建议创建包装类。如果您需要一个数据结构,您可以在其中查找integer以获取value(或查找value以获取integer),那么我会建议使用字典。

答案 1 :(得分:6)

List<Tuple<T1, T2>>(或List<KeyValuePair<T1, T2>>)与Dictionary<T1, T2>的决定很大程度上取决于你想用它做什么。

如果你要存储信息然后迭代它,而不需要根据特定的键值进行频繁的查找,那么List可能就是你想要的。根据 你将如何使用它,LinkedList可能会更好 - 稍高的内存开销,更快的内容操作(添加/删除)操作。

另一方面,如果您主要使用第一个值作为频繁查找的键,那么Dictionary专门用于此目的。键值搜索和比较得到了显着改善,因此如果您对键做了很多事情并且列表很大,则词典会给您带来很大的速度提升。

数据大小对决策很重要。如果你说的是几百件或更少,List可能就好了。在此之上,查找时间可能会对执行时间产生更大影响,因此Dictionary可能更值得。

没有严格的规则。每个用例都不同,因此您必须平衡您的需求与开销。

答案 2 :(得分:1)

您可以使用KeyValuePair列表:http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx

答案 3 :(得分:0)

您可以使用KeyValuePairTuple

对于Tuple,您可以阅读以下有用的帖子: What requirement was the tuple designed to solve?

答案 4 :(得分:0)

您可以使用Tuple<T,T1>KeyValuePair<T, T1>列表 - 或匿名类型,例如

var list = something.Select(x => new { Key = x.Something, Value = x.Value });