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