你如何按价值排列字典?

我通常需要按值排列包含键和值的字典。 作为一个例子,我有一个单词和相应的规则,我打算定期得到。

有一个SortedList有利于一个单独的值(声明规则性),我打算将它映射回单词。

SortedDictionary按键排序,而不是值。 有些人认为是自定义类,但存在更清洁的手段?

0
2019-05-03 18:08:42
资源 分享
答案: 4

在很大程度上,在此之后您没有其他选择来浏览整个字典并考虑每个值。

可能是这个辅助工具:http://bytes.com/forum/thread563638.html。 复制/粘贴约翰蒂姆尼:

Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "a Item");
s.Add("2", "c Item");
s.Add("3", "b Item");

List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(s);
myList.Sort(
    delegate(KeyValuePair<string, string> firstPair,
    KeyValuePair<string, string> nextPair)
    {
        return firstPair.Value.CompareTo(nextPair.Value);
    }
);
0
2019-05-07 17:16:14
资源

查看并使用一些C#3.0属性我们可以这样做:

foreach (KeyValuePair<string,int> item in keywordCounts.OrderBy(key=> key.Value))
{ 
    // do something with item.Key and item.Value
}

这是我见过的最干净的方法,也类似于Ruby处理哈希的方法。

0
2019-05-07 17:05:56
资源

使用 :

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));
0
2019-05-07 16:35:51
资源

使用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条件。

0
2019-05-07 16:32:34
资源