C# 按值而不是键对 StringDictionary 进行排序

发布于 2024-09-11 02:52:32 字数 258 浏览 0 评论 0原文

按值(而不是键)的顺序对 StringDictionary 进行排序(或迭代)的“最佳”方法是什么,

例如键 - 值

  • 1 - X 标签
  • 2 - 标签
  • 3 - 其他标签

将给出

  • 2 - 标签
  • 3 - 其他标签
  • 1 - X 标签

编辑 - 我的意思是“使用 .NET 2.0 功能”。对不起,我不好……

What is the 'best' way to sort (or iterate) over a StringDictionary in order of Value (not Key)

E.g. Key - Value

  • 1 - X label
  • 2 - A label
  • 3 - Other label

would give

  • 2 - A label
  • 3 - Other label
  • 1 - X label

EDIT - I meant to say "using .NET 2.0 features". Sorry, me bad...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我三岁 2024-09-18 02:52:32

使用 LINQ:

var items = from k in d.Keys
                    orderby d[k] ascending
                    select k;

如果您仅限于 C# 2.0 功能,请使用以下命令:

    IDictionary<string, string> d = new Dictionary<string, string>();
    d["1"] = "X label";
    d["2"] = "A label";
    d["3"] = "Other Label";

    List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(d);
    myList.Sort(
        delegate(KeyValuePair<string, string> a,
        KeyValuePair<string, string> b)
        {
            return a.Value.CompareTo(b.Value);
        }
    );

注意:
如果您使用 StringDictionary 而不是 Dictionary,请查看 Anthony 的解决方案。

Use LINQ:

var items = from k in d.Keys
                    orderby d[k] ascending
                    select k;

If you are restricted to C# 2.0 features, use this:

    IDictionary<string, string> d = new Dictionary<string, string>();
    d["1"] = "X label";
    d["2"] = "A label";
    d["3"] = "Other Label";

    List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(d);
    myList.Sort(
        delegate(KeyValuePair<string, string> a,
        KeyValuePair<string, string> b)
        {
            return a.Value.CompareTo(b.Value);
        }
    );

Note:
If you are using a StringDictionary instead of Dictionary, check out Anthony's solution.

明月夜 2024-09-18 02:52:32

使用 StringDictionary 类,这里是使用 LINQ 的 OrderBy 的方法。假设您有 .NET 3.5。

var sortedDictionary = dictionary.Cast<DictionaryEntry>().OrderBy(pair => pair.Value);

使用2.0,有点棘手。这是使用比较委托的方法。

StringDictionary dictionary = new StringDictionary();
dictionary.Add("1", "One");
dictionary.Add("2", "Two");
dictionary.Add("3", "Three");

DictionaryEntry[] sortedDictionary = new DictionaryEntry[dictionary.Count];
dictionary.CopyTo(sortedDictionary, 0);
Comparison<DictionaryEntry> comparison = new Comparison<DictionaryEntry>(delegate (DictionaryEntry obj1, DictionaryEntry obj2) { return ((string)obj1.Value).CompareTo((string)obj2.Value); });
Array.Sort(sortedDictionary, comparison);

所以实际的排序将在sortedDictionary 数组中。

Using the StringDictionary class, here is a method to use LINQ's OrderBy. Assumes you have .NET 3.5.

var sortedDictionary = dictionary.Cast<DictionaryEntry>().OrderBy(pair => pair.Value);

Using 2.0, it's a bit trickier. Here's an approach using a Comparison delegate.

StringDictionary dictionary = new StringDictionary();
dictionary.Add("1", "One");
dictionary.Add("2", "Two");
dictionary.Add("3", "Three");

DictionaryEntry[] sortedDictionary = new DictionaryEntry[dictionary.Count];
dictionary.CopyTo(sortedDictionary, 0);
Comparison<DictionaryEntry> comparison = new Comparison<DictionaryEntry>(delegate (DictionaryEntry obj1, DictionaryEntry obj2) { return ((string)obj1.Value).CompareTo((string)obj2.Value); });
Array.Sort(sortedDictionary, comparison);

So the actual sort would be in the sortedDictionary array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文