VB.Net按整数的值排序字典(字符串,整数)

时间:2012-07-10 20:36:03

标签: vb.net dictionary

我有一个String,Integer字典,所以键是字符串,值是整数,我想按顺序对整数值进行排序。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:9)

您可以使用LINQ按值Dictionary排序:

Dim dictionary = New Dictionary(Of String, Integer)() 
dictionary.Add("A", 2)
dictionary.Add("B", 4)
dictionary.Add("C", 5)
dictionary.Add("D", 3)
dictionary.Add("E", 1)

Dim sorted = From pair In dictionary
             Order By pair.Value
Dim sortedDictionary = sorted.ToDictionary(Function(p) p.Key, Function(p) p.Value)

实际上它不会修改原始词典,而是使用新订单创建一个新词典。

:除了可行性之外,Dictionary不是IList(作为数组或List<T>)。它的目的是非常有效地查找密钥,但不循环所有条目。

它们是无序的,这意味着尽管您可以使用foreach循环以某种顺序检索元素,但该顺序没有特殊含义,并且它可能会在没有明显原因的情况下发生变化。

答案 1 :(得分:3)

首先,字典没有内在的顺序。这是为了查找。但是,您可以将密钥转换为自己的有序列表。

Dim keyList as List(Of String) = (From tPair As KeyValuePair(Of String, Integer) _
                                  In myDictionary Order By tPair.Value Ascending _
                                  Select tPair.Key).ToList

答案 2 :(得分:2)

我必须使用自定义对象做类似的事情。我认为这应该是接近(但可能不完全)你正在寻找的东西:

Dim sortedL As List(Of KeyValuePair(Of String, Integer)) = yourDictionary.ToList
sortedL.Sort(Function(firstPair As KeyValuePair(Of String, Integer), nextPair As KeyValuePair(Of String, Integer)) CInt(firstPair.Value).CompareTo(CInt(nextPair.Value)))