关于c#:如何禁用字典中的排序?

How to disable sorting in a Dictionary?

本问题已经有最佳答案,请猛点这里访问。

我用的是Dictionary,我有一个问题,我需要把条目按它们在字典中的顺序排列,而不是按相应键的字母顺序排列。

是否有一种方法可以禁用添加项的排序,或者更好地使用其他自定义类(我希望保留所有dic[key] = value和其他访问器的原样)?

如果使用Dictionary是不可能的,我还能用什么键返回项目?


对象存储在Dictionary<>对象中的顺序不能保证是任何特定的顺序。它只是为按键访问而优化的。如果您需要保证对象的顺序,那么您应该使用除Dictionary<>之外的其他东西。

显然有一个SortedDictionary<>类。我甚至没想到要找那个,因为它似乎和字典有点矛盾…


I need to keep the items in the order they were placed in the dictionary,

这不符合字典的主要职责。

您可以使用List>或其他东西来满足您的需求。用索引器将它包装在类中,以获得dic[key] = value语法。


Dictionary中没有类似的顺序:

For purposes of enumeration, each item in the dictionary is treated as
a KeyValuePair structure representing a value and its
key. The order in which the items are returned is undefined.


您可以使用:

1
List<KeyValuePair<T1,T2>>

这个列表确实保持了插入顺序,就像字典中定义了顺序一样。

编辑:

既然你既想要点菜,又想要一个接受者,如果内存没有问题,可以构建一个包装类,该类将值保存在两个内部集合中:

清单和字典。您将按索引(从列表中)和按键(从字典中)提供包装getter。列表和字典都需要是私有的,请确保Alwyas在两个集合中添加和删除对象。