2

我想要的基本上是一个混合了字典和列表的集合。我想要一个可以添加键/值对的集合(如字典),但同时能够以添加它们的相同顺序检索值(没有键)(如列表)?.NET 中是否存在这样的集合?

谢谢

4

4 回答 4

13

有一个称为非通用数据结构的数据结构可以满足OrderedDictionary您的需求。它有两个索引器,一个接受Object并执行键/值查找,另一个接受int并执行索引查找。您还可以按照添加内容的顺序枚举内容。

我在文档中没有看到任何关于字典查找是否实现O (1) (即快速)行为的内容。鉴于它实现ISerializable了它很可能使用对象的哈希码,因此具有O (1) 字典查找。

您还可以创建自己的泛型类型来封装 aList<T>和 a Dictionary<TKey,TValue>

于 2010-09-10T10:58:33.180 回答
2

System.Collections.ObjectModel.KeyedCollection非常接近您的要求,除了字典键必须可以从值派生。

于 2010-09-12T18:33:08.063 回答
0

不,目前框架中没有实现此功能的任何内容(但请参阅下面的编辑)。

基本上,您会想在自己的班级中编写 aList<T>和 a 。Dictionary<TKey, TValue>

OrderedDictionary编辑:正如 wesleyhill 所指出的,我真的忘记了 - 但我不相信框架中有这样的通用集合。我假设您实际上想要一个通用集合?你当然可以写一个包装器OrderedDictionary......

编辑:快速说明:虽然包装集合一点也不难,但您将失去通用集合的一个好处:避免装箱。当然,如果您的键和值是引用类型,则不是问题。

于 2010-09-10T10:47:48.697 回答
0
  • 创建一个包装字典的新类
  • 添加数据时,将数据包装在一个引入索引的小助手类中
  • 返回值时,根据索引对它们进行排序

不会是性能怪物,但应该可以正常工作。否则,您可以像在 Java 中一样实现自己的LinkedHashMap 。

顺便说一下,看看这个: LinkedHashMap in .NET

编辑:我更喜欢 wesleyhills 的想法:将 List 和 Dictionary 封装在一个类中。始终添加到两者并返回列表而不是 Dictionary.Values。

于 2010-09-10T11:01:47.813 回答