如何保持字典顺序?

Sup*_*est 0 c# dictionary

我有一个Dictionary<string, Func<string, string>>.我使用键来提供下拉项,允许用户选择要运行的算法.然后我可以方便地将所选值反馈到字典中以获得相关功能.

// Initialization
my_dict["Function #1"] = func1;
my_dict["Function #2"] = func2;

...

// Executing
result = my_dict[user_choice](input);
Run Code Online (Sandbox Code Playgroud)

现在,当填充下拉列表时(a System.Windows.Forms.ComboBox)我循环使用这个键foreach.MSDN警告说,System.Collections.Generic.Dictionary不能保证有稳定的订单.但实际上我知道订单非常稳定,所以它现在有效.我确实希望为用户很好地订购这些功能.

但是,我想要正确地做到这一点 - 即.通过使用保证订单稳定性的数据结构.不幸的OrderedDictionary是没有用,因为它强迫值为objects; 我想让他们成为职能代表.与此同时,我不想添加太多不必要的复杂性(例如,我可以将密钥的副本存储为List<string>用于订单,但这似乎是一个糟糕的解决方案).

我能做什么?

注意:看起来有些人认为我希望我的项目按字母顺序排列.我不.我希望它们保持与我添加它们的顺序相同.也就是说,如果Function #2之前添加了密钥Function #1,它将按顺序出现在它之前.

ckr*_*zek 5

而不是使用OrderedDictionary,你应该使用SortedDictionary<TKey, TValue>.

这个按键排序.所以你的字符串为你的例子.这应该足够了.

更新:

如果您没有使用任何本机可比类型,则需要IEqualityComparer<T>为您的密钥类实现接口.

  • 然后根据您的首选顺序实施比较器。 (2认同)