.NET中是否有一个集合可以同时作为字典和列表使用?

时间:2010-09-10 10:39:21

标签: .net list collections dictionary generic-collections

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

由于

4 个答案:

答案 0 :(得分:13)

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

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

您还可以创建自己的通用类型,其中包含List<T>Dictionary<TKey,TValue>

答案 1 :(得分:2)

System.Collections.ObjectModel.KeyedCollection非常接近您所要求的内容,但字典键必须可以从值中派生。

答案 2 :(得分:0)

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

基本上你想要在自己的班级中撰写List<T>Dictionary<TKey, TValue>

编辑:我真的忘记了OrderedDictionary正如韦斯特希尔所指出的那样 - 但我不相信框架中有这样的泛型集合。我假设你真的想要一个通用的集合?你当然可以在OrderedDictionary附近写一​​个包装器......

编辑:快速注意:虽然包装集合应该不会很难,但是你将失去通用集合的一个好处:避免装箱。如果您的键和值是引用类型,则不是问题。

答案 3 :(得分:0)

  • 创建一个包装词典的新类
  • 添加数据时,将数据包装在一个引入索引的小助手类中
  • 返回值时,请根据索引
  • 进行排序

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

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

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