你如何按价值对字典进行排序?

我经常不得不按价值排序包含键和值的字典。 例如,我有一个单词和各自的频率散列,我想按频率排序。

有一个SortedList对单个值(比如频率)很有用,我想将它映射回单词。

SortedDictionary按键排序,而不是值。 有人诉诸自定义课程,但有更清晰的方法吗?


使用:

using System.Linq.Enumerable;
...
List<KeyValuePair<string, string>> myList = aDictionary.ToList();

myList.Sort(
    delegate(KeyValuePair<string, string> pair1,
    KeyValuePair<string, string> pair2)
    {
        return pair1.Value.CompareTo(pair2.Value);
    }
);

由于您的目标是.NET 2.0或更高版本,因此您可以将其简化为lambda语法 - 它相同,但更短。 如果您的目标是.NET 2.0,则只有在使用Visual Studio 2008(或更高版本)的编译器时才能使用此语法。

var myList = aDictionary.ToList();

myList.Sort((pair1,pair2) => pair1.Value.CompareTo(pair2.Value));

使用LINQ:

Dictionary<string, int> myDict = new Dictionary<string, int>();
myDict.Add("one", 1);
myDict.Add("four", 4);
myDict.Add("two", 2);
myDict.Add("three", 3);

var sortedDict = from entry in myDict orderby entry.Value ascending select entry;

这也可以提供很大的灵活性,因为您可以选择前10,20 10%等。或者,如果您使用type-ahead词频索引,还可以包含StartsWith子句。


var ordered = dict.OrderBy(x => x.Value);
链接地址: http://www.djcxy.com/p/12215.html

上一篇: How do you sort a dictionary by value?

下一篇: Python sorting list of dictionaries by multiple keys