我正在使用 aDictionary<string, object>
并且遇到了一个问题,我需要按照它们在字典中的顺序保存项目,而不是按照相应键的字母顺序。
有没有办法禁用对添加项目的排序,或者使用其他一些自定义类更好(我想保持所有dic[key] = value
和其他访问器原样)?
如果 a 不可能Dictionary
,我还能使用什么仍然按键返回项目?
我正在使用 aDictionary<string, object>
并且遇到了一个问题,我需要按照它们在字典中的顺序保存项目,而不是按照相应键的字母顺序。
有没有办法禁用对添加项目的排序,或者使用其他一些自定义类更好(我想保持所有dic[key] = value
和其他访问器原样)?
如果 a 不可能Dictionary
,我还能使用什么仍然按键返回项目?
对象存储在Dictionary<>
对象中的顺序不能保证是任何特定的顺序。它只是针对按键访问进行了优化。如果您需要保证对象的顺序,那么您应该使用除 a 之外的其他东西Dictionary<>
显然有一个SortedDictionary<>类。我什至没有想过要寻找它,因为它似乎与字典有点对立......
我需要按照它们在字典中的顺序保留这些项目,
这不符合字典的主要职责。
您可以使用 aList<KeyValuePair<K,V>>
或其他东西来满足您的要求。使用索引器将其包装在一个类中以获取dic[key] = value
语法。
没有像 order in 这样的东西Dictionary<TKey, TValue>
:
出于枚举的目的,字典中的每个项目都被视为表示值及其键的 KeyValuePair 结构。返回项目的顺序未定义。
你可以使用这个:
List<KeyValuePair<T1,T2>>
该列表确实保持插入顺序与内部定义顺序的字典相反。
编辑:
由于您需要排序和 [] getter,如果您没有内存问题,您可以构建一个包装类,将值保存在两个内部集合中:
一个列表和一个字典。您将按索引(来自列表)和按键(来自字典)提供包装器 getter。列表和字典都需要是私有的,一定要从两个集合中添加和删除对象。