C#字典与列表用法

C#字典与列表用法,c#,list,dictionary,hashtable,C#,List,Dictionary,Hashtable,我有两个问题。我想知道C#库中是否有一个easy类存储成对的值而不是一个值,这样我就可以在列表的同一节点中存储一个类和一个整数。我认为最简单的方法就是创建一个容器类,但是每次都是额外的工作。我想知道我是否应该这样做。我知道在.NET的更高版本(我使用的是3.5)中,有一些元组可以存储,但我无法使用 我想更大的问题是,即使我不需要在O(1)中访问,也可以只搜索列表,但使用字典存储整数类映射的内存缺点是什么?哈希表的最小大小是多少?我应该创建我需要的包装类吗?您可以使用KeyValuePair的列表

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


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

您可以使用KeyValuePair的列表:

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

您可以使用或

对于Tuple,您可以阅读以下有用的帖子:

您可以使用
元组、
键值对列表或匿名类型,例如

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

List
(或
List
)与
Dictionary
之间的区别很大程度上取决于你想用它做什么

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

另一方面,如果主要使用第一个值作为键进行频繁查找,则专门为此设计了一个
字典。键值搜索和比较得到了显著的改进,所以如果你对键值做了很多工作,并且你的列表很大,那么字典将大大提高你的速度

数据大小对决策非常重要。如果您谈论的是几百项或更少的项目,那么一个
列表可能就可以了。在这一点上,查找时间可能会对执行时间产生更显著的影响,因此
字典
可能更值得


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

不是类而是结构:。还有(这是一个类)。这是一个很好的建议,尽管需要注意的是,
KeyValuePair
是一个结构,这意味着您必须处理有时不方便的结构语义。谢谢。这可能就是我最终使用的。键值对原因元组不可用。忘了这门课吧,这不是一门课。此外,在使用简单元组类时,它比简单元组类慢得多,因此如果您不能使用.NET 3.5,那么我建议为此创建简单的自定义类。每当我看到用于中间结果以外的任何内容的匿名类型时,我都会不寒而栗。我知道它们是语言的一部分,在特定情况下很方便,但它们太。。。untidy:)Tuple在.NET3.5中不可用,OP特别声明他正在使用它。非常感谢您的建议。你知道字典的最小尺寸是多少吗?如果使用字典来存储少量值,是否会浪费大量内存?I.NET4.5中字典的最小大小似乎是3项。之后,它会加倍生长。过去的测试表明,字典开销约为每个条目24字节。字典本身的开销大约在50到100字节之间(实际上并不比列表的开销大多少)。哇,很有趣。我原以为这本词典需要更多的开销。