排序词典

时间:2014-02-23 15:43:05

标签: c# sorting dictionary sorteddictionary

我正在阅读有关排序字典的一些信息,因为我之前从未使用过任何非常详细的字典。

从我读到的关于它们的内容来看,它们按照其中的关键价值进行排序。那是对的吗?此外,字典是否会根据读入的值不断自动排序?

如果是这样,有没有办法可以改变这个,所以字典通过与键相关的值来自行排序。例如,我有一个带有以下内容的排序字典:

Key: 4  Value: 40 
Key: 1  Value: 290 
Key: 86  Value: 7 

排序后的字典会对其进行排序:

Key: 1  Value: 290 
Key: 4  Value: 40 
Key: 86  Value: 7 

但我希望它能做到以下几点:

Key: 86  Value: 7 
Key: 4  Value: 40 
Key: 1  Value: 290 

最后,我将如何访问此排序的第一和第二点,以便将其分配给其他内容?

1 个答案:

答案 0 :(得分:0)

默认情况下SortedDictionary<TKey, TValue>根据Sorting执行Key,而不是Value执行。{/ p>

但是如果你想根据Value进行排序,你可以使用LINQ OrderBy()方法:

来自MSDN:SortedDictionary

  

表示按键排序的键/值对的集合。

试试这个:

var SortedByValueDict = dict.OrderBy(item => item.Value);

完整代码:

class Program
{
static void Main(string[] args)
{
    SortedDictionary<int, int> dict = new SortedDictionary<int, int>();
    dict.Add(4, 40);
    dict.Add(1, 290);
    dict.Add(86, 7);

    Console.WriteLine("Sorted Dictionary Items sorted by Key");
    foreach (var v in dict)
    {
    Console.WriteLine("Key = {0} and Value = {1}", v.Key, v.Value);
    }

    Console.WriteLine("------------------------\n");
    Console.WriteLine("Sorted Dictionary Items sorted by Value");
    var SortedByValueDict = dict.OrderBy(item => item.Value);

    foreach (var v in SortedByValueDict)
    {
    Console.WriteLine("Key = {0} and Value = {1}", v.Key, v.Value);
    }
}
}

输出

Sorted Dictionary Items sorted by Key
Key = 1 and Value = 290
Key = 4 and Value = 40
Key = 86 and Value = 7
------------------------

Sorted Dictionary Items sorted by Value
Key = 86 and Value = 7
Key = 4 and Value = 40
Key = 1 and Value = 290