我有两个问题。我想知道在C#库中是否有一个简单的类来存储值对而不是一个,这样我就可以在列表的同一节点中存储一个类和一个整数。我认为最简单的方法是创建一个容器类,但每次都是额外的工作。我想知道我是否应该这样做。我知道在.NET的更高版本(我使用的是3.5)中,我可以存储有元组,但是我无法使用。
我想更大的问题是使用字典存储整数类映射的内存缺点是什么,即使我不需要在O(1)中访问并且只能搜索列表?哈希表的最小大小是多少?我应该制作我需要的包装类吗?
答案 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)
您可以使用KeyValuePair或Tuple
对于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 });