繁体   English   中英

C#字典vs列表用法

[英]C# dictionary vs list usage

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

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

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

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

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

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

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

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

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

您可以使用KeyValuePairTuple

对于Tuple,您可以阅读以下有用的帖子: 要解决的元组有哪些要求?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM