我有两个问题。我想知道 C# 库中是否有一个简单的类可以存储一对值而不是一个,这样我就可以在列表的同一个节点中存储一个类和一个整数。我认为最简单的方法是创建一个容器类,但因为每次都是额外的工作。我想知道我是否应该这样做。我知道在 .NET 的更高版本(我使用的是 3.5)中,我可以存储一些元组,但这对我来说不可用。
我想更大的问题是使用字典存储整数类映射的内存缺点是什么,即使我不需要在 O(1) 中访问并且可以只搜索列表?哈希表的最小大小是多少?我应该只制作我需要的包装类吗?
我有两个问题。我想知道 C# 库中是否有一个简单的类可以存储一对值而不是一个,这样我就可以在列表的同一个节点中存储一个类和一个整数。我认为最简单的方法是创建一个容器类,但因为每次都是额外的工作。我想知道我是否应该这样做。我知道在 .NET 的更高版本(我使用的是 3.5)中,我可以存储一些元组,但这对我来说不可用。
我想更大的问题是使用字典存储整数类映射的内存缺点是什么,即使我不需要在 O(1) 中访问并且可以只搜索列表?哈希表的最小大小是多少?我应该只制作我需要的包装类吗?
List<Tuple<T1, T2>>
(or List<KeyValuePair<T1, T2>>
) vs的决定Dictionary<T1, T2>
很大程度上取决于你想用它做什么。
如果您要存储信息然后对其进行迭代,而不需要根据特定的键值进行频繁的查找,那么 aList
可能就是您想要的。根据您将如何LinkedList
使用它,a可能会更好 - 内存开销稍高,内容操作(添加/删除)操作更快。
另一方面,如果您打算主要使用第一个值作为键来进行频繁查找,那么 aDictionary
就是专门为此目的而设计的。键值搜索和比较得到了显着改进,所以如果你对键做很多事情并且你的列表很大,那么字典会给你带来很大的速度提升。
数据大小对决策很重要。如果您谈论的是几百个或更少的项目,aList
可能没问题。超过这一点,查找时间可能会对执行时间产生更显着的影响,因此Dictionary
可能更值得。
没有硬性规定。每个用例都是不同的,因此您必须平衡您的需求和开销。
如果您需要存储 的无序列表{integer, value}
,那么我建议您制作包装类。如果您需要一个可以在其中查找integer
以获取value
(或查找value
以获取integer
)的数据结构,那么我建议您使用字典。
您可以使用 KeyValuePair 列表:http: //msdn.microsoft.com/en-us/library/5tbh8a42.aspx
您可以使用KeyValuePair或Tuple
对于元组,您可以阅读以下有用的帖子: 元组旨在解决什么要求?
您可以使用Tuple<T,T1>
、 列表KeyValuePair<T, T1>
- 或匿名类型,例如
var list = something.Select(x => new { Key = x.Something, Value = x.Value });