【问题标题】:Order a dictionary without using Linq OrderBy在不使用 Linq OrderBy 的情况下订购字典
【发布时间】:2014-06-15 01:27:45
【问题描述】:

我正在尝试按其值订购 C# Dictionary<int, int>,而不使用 LINQ 的 OrderBy,因为 iPhone 不支持它。

我似乎无法弄清楚,因此非常感谢您的帮助!

【问题讨论】:

  • iPhone 真的支持 C# 字典吗?
  • iPhone 是什么意思?您使用的是哪个 SDK?
  • 为什么需要按值排序?这是一个不能与根本没有排序的字典一起使用的要求。我建议使用不同的集合。
  • 对于所有询问 iPhone 和 C# 的人:Xamarin。不是因为我想宣传它,而是因为似乎有人因此投票结束了这个问题。

标签: c# dictionary ordereddictionary


【解决方案1】:

我们可以生成KeyValuePairList,然后使用Sort对其进行排序,

      Dictionary<int, int> myList = new Dictionary<int, int>();
        List<KeyValuePair<int, int>> mySortedList = myList.ToList();

        mySortedList.Sort(( firstValue, nextValue) =>
            {
                return firstValue.Value.CompareTo(nextValue.Value);
            }
        );
        Dictionary<int, int> mySortedDict = mySortedList.ToDictionary(keyItem => keyItem.Key, keyItem => keyItem.Value);

我认为Sort 将在 iPhone 上得到支持

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。以下所有假设myDictionary 是要排序的原始字典。

    ①创建一个列表,然后对列表进行排序

    var myList = myDictionary.ToList();
    myList.Sort((a, b) => a.Value.CompareTo(b.Value));
    

    ②创建数组,然后对数组进行排序

    var myArray = myDictionary.ToArray();
    Array.Sort(myArray, (a, b) => a.Value.CompareTo(b.Value));
    

    ③ 创建一个新的 SortedDictionary 键和值交换

    仅当您知道每个值仅出现一次时,此解决方案才适用。

    var mySortedDict = new SortedDictionary<int, int>();
    foreach (var kvp in myDictionary)
        mySortedDict[kvp.Value] = kvp.Key;
    

    ④ 创建一个新的 SortedDictionary 并为值使用列表

    此解决方案仅适用于值可以出现多次的情况。

    var mySortedDict = new SortedDictionary<int, List<int>>();
    foreach (var kvp in myDictionary)
    {
        if (!mySortedDict.ContainsKey(kvp.Value))
            mySortedDict[kvp.Value] = new List<int>();
        mySortedDict[kvp.Value].Add(kvp.Key);
    }
    

    【讨论】:

    • 感谢您的意见。我正在使用 Unity3D,而我现在才使用 C# 几个月。可能是我,但我的字典没有 ToList() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2015-09-26
    • 2014-05-10
    • 2022-01-18
    • 2019-08-16
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多