不使用 Linq OrderBy,如何订购字典

3

我想按值对C# Dictionary<int, int>进行排序,但不能使用LINQ的OrderBy,因为它不支持iPhone。

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


C# 字典在 iPhone 上真的被支持吗? - satnhak
1
你是指iPhone的什么?你使用哪个SDK? - Patrick Hofman
1
为什么需要按值排序?这是一个要求,而字典根本不具备顺序性。我建议使用其他集合。 - Tim Schmelter
1
对于所有询问关于 iPhones 和 C# 的人:Xamarin。我并不是因为想推广它,而是因为有人甚至投票关闭了这个问题。 - Roman Starkov
2个回答

5

有许多可能的方法来做到这一点。以下所有方法都假设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()方法。 - Fluup

0
我们可以生成一个 ListKeyValuePair,然后使用 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上得到支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接