我想要的基本上是一个混合了字典和列表的集合。我想要一个可以添加键/值对的集合(如字典),但同时能够以添加它们的相同顺序检索值(没有键)(如列表)?.NET 中是否存在这样的集合?
谢谢
我想要的基本上是一个混合了字典和列表的集合。我想要一个可以添加键/值对的集合(如字典),但同时能够以添加它们的相同顺序检索值(没有键)(如列表)?.NET 中是否存在这样的集合?
谢谢
有一个称为非通用数据结构的数据结构可以满足OrderedDictionary
您的需求。它有两个索引器,一个接受Object
并执行键/值查找,另一个接受int
并执行索引查找。您还可以按照添加内容的顺序枚举内容。
我在文档中没有看到任何关于字典查找是否实现O (1) (即快速)行为的内容。鉴于它实现ISerializable
了它很可能使用对象的哈希码,因此具有O (1) 字典查找。
您还可以创建自己的泛型类型来封装 aList<T>
和 a Dictionary<TKey,TValue>
。
System.Collections.ObjectModel.KeyedCollection非常接近您的要求,除了字典键必须可以从值派生。
不,目前框架中没有实现此功能的任何内容(但请参阅下面的编辑)。
基本上,您会想在自己的班级中编写 aList<T>
和 a 。Dictionary<TKey, TValue>
OrderedDictionary
编辑:正如 wesleyhill 所指出的,我真的忘记了 - 但我不相信框架中有这样的通用集合。我假设您实际上想要一个通用集合?你当然可以写一个包装器OrderedDictionary
......
编辑:快速说明:虽然包装集合一点也不难,但您将失去通用集合的一个好处:避免装箱。当然,如果您的键和值是引用类型,则不是问题。
不会是性能怪物,但应该可以正常工作。否则,您可以像在 Java 中一样实现自己的LinkedHashMap 。
顺便说一下,看看这个: LinkedHashMap in .NET
编辑:我更喜欢 wesleyhills 的想法:将 List 和 Dictionary 封装在一个类中。始终添加到两者并返回列表而不是 Dictionary.Values。