繁体   English   中英

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

[英]VB.Net Order a Dictionary(Of String, Integer) by value of the Integer

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

您可以使用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 (作为Array或List<T> )。 它的目的是非常有效地查找密钥,但不循环所有条目。

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

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

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

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

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)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM