【问题标题】:How to order keys in Dictionary?如何在字典中排序键?
【发布时间】:2018-05-20 15:32:44
【问题描述】:

我有一个Dictionary<int?,List<string>>。我需要输出按键升序排序的键和值对。首先,我认为使用 OrderedDictionary 但它以对象类型保存键和值。也许可以通过扩展方法以某种方式完成?

【问题讨论】:

  • 我正要说,您可以收集 List 中的所有键并对它们进行排序,然后以有序的方式相应地访问它。对有关此解决方案的错误/正确之处的任何想法持开放态度。
  • 其实,你只想要一个List<int?> 只需要排序的键吗?
  • 人们正试图回答您的问题,但由于您的问题不清楚,他们被否决了。请提供一个示例,说明您拥有什么以及您期望的输出是什么。另外,你的代码在哪里?如果没有代码,您的问题可以有多种解释方式。

标签: c# sorting dictionary


【解决方案1】:

你有两个选择:

  1. 使用SortedList<TKey,TValue>/SortedDictionary<TKey,TValue>:

    var sortedData = new SortedList<int?, List<string>>(currentDictionary);
    
  2. 使用 Linq 的OrderBy:

    var sortedData = currentDictionary.OrderBy(x => x.Key);
    

您可以将这些选项中的任何一个用于以下打印:

foreach (var entry in sortedData)
{
    Console.WriteLine("Key: {0}, Values: ", entry.Key);

    foreach (var value in entry.Value)
    {
        Console.WriteLine(value);
    }
}

【讨论】:

    【解决方案2】:
    Dictionary<int?, List<string>> yourDictionary = GetTheDictionary();
    var sortedKeys = yourDictionary.Select(kvp => kvp.Key).OrderBy(k => k);
    

    这将为您提供所有键的升序列表

    如果你想要你的字典一样。即仍然作为键值对。只需按钥匙订购即可。

    yourDictionary.OrderBy(kvp => kvp.Key);
    

    【讨论】:

    • OP 也需要这些值 dictionary.OrderBy(p =&gt; p.Key)
    • Mm OPs 的问题很难理解,不过我会更新以包含这个,谢谢
    猜你喜欢
    • 2019-04-21
    • 2018-12-07
    • 1970-01-01
    • 2011-01-25
    • 2021-12-09
    • 1970-01-01
    • 2021-03-28
    • 2021-04-24
    • 2020-11-17
    相关资源
    最近更新 更多