我有一个String,Integer字典,所以键是字符串,值是整数,我想按顺序对整数值进行排序。我怎么能做到这一点?
答案 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)))