2

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

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

4

5 回答 5

6

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

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

另一方面,如果您打算主要使用第一个值作为键来进行频繁查找,那么 aDictionary就是专门为此目的而设计的。键值搜索和比较得到了显着改进,所以如果你对键做很多事情并且你的列表很大,那么字典会给你带来很大的速度提升。

数据大小对决策很重要。如果您谈论的是几百个或更少的项目,aList可能没问题。超过这一点,查找时间可能会对执行时间产生更显着的影响,因此Dictionary可能更值得。

没有硬性规定。每个用例都是不同的,因此您必须平衡您的需求和开销。

于 2013-05-28T23:00:00.540 回答
6

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

于 2013-05-28T22:05:56.773 回答
1

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

于 2013-05-28T22:04:41.273 回答
0

您可以使用KeyValuePairTuple

对于元组,您可以阅读以下有用的帖子: 元组旨在解决什么要求?

于 2013-05-28T22:07:31.937 回答
0

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

var list = something.Select(x => new { Key = x.Something, Value = x.Value });
于 2013-05-28T22:14:50.943 回答