【问题标题】:Sorting a Dictionary by Value按值对字典进行排序
【发布时间】:2011-02-09 21:41:51
【问题描述】:

我有一本格式如下的字典:

{ "honda" : 4, "toyota": 7, "ford" : 3, "chevy": 10 }

我想按第二列(即值)降序对其进行排序。

期望的输出:

“雪佛兰”,10

“丰田”,7

“本田”,4

“福特”,3

【问题讨论】:

    标签: vb.net sorting dictionary


    【解决方案1】:

    感谢 caryden 来自: How do you sort a dictionary by value?

    Dim sortedDict = (From entry In dict Order By entry.Value Descending Select entry)
    

    上面报告的问题是由于循环不当造成的。

    【讨论】:

      【解决方案2】:

      其实如果是HashTable,是不能排序的。 另一方面,如果您有一个 ArrayList 或任何其他可以排序的集合,您可以实现自己的 IComparer。

        public class MyDicComparer : IComparer
        {
          public int Compare(Object x, Object y)
          {
            int Num1= ((Dictionary)x).Value;   // or whatever
            int Num2= ((Dictionary)y).Value;
      
            if (Num1 < Num2) return 1;
            if (Nun1 > Num2) return -1;
            return 0;  // Equals, must be consideres
          }
      
      ArrayList AL;
      ...
      AL.Sort(MyDicComparer);  
      

      HTH

      【讨论】:

      • 在“实现 IComparer”时出错:公共类 MyDictComparer 实现 IComparer 公共函数 Compare(ByVal x As [Object], ByVal y As [Object]) As Integer Dim Num1 As DictionaryEntry = DirectCast(x , DictionaryEntry) Dim Num2 As DictionaryEntry = DirectCast(y, DictionaryEntry) If CInt(Num1.Value) CInt(Num2.Value) Then Return - 1 End If Return 0 End Function End Class
      • 错误消息:类 'CountValueComparer' 必须为接口 'System.Collections.IComparer' 实现 'Function Compare(x As Object, y As Object) As Integer'。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多