2010-04-19 4 views
6

У меня есть словарь в виде:Сортировка словаря по значению

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

Я хочу, чтобы отсортировать его по второй колонке ака (величина) нисходящей.

Желаемого выход:

"Шевроль", 10

"Тойота", 7

"Хонда", 4

"Форд", 3

ответ

0

Собственно, если это 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); 

НТН

+0

Получить ошибку на "реализует IComparer": Public Class MyDictComparer Реализует IComparer Public Function Сравнить (ByVal х As [Object], ByVal Y As [Object]) As Integer Dim Num1 As DictionaryEntry = DirectCast (х, DictionaryEntry) Dim Num2 Как DictionaryEntry = DirectCast (у, DictionaryEntry) Если CInt (Num1.Value) CInt (Num2.Value) Затем Возврат -1 Конец If Возврат 0 Конечная функция Конец класса – s15199d

+0

Сообщение об ошибке: Класс «CountValueComparer» должен реализовывать «Функция сравнения (x As Object, y As Object) As Integer» для интерфейса «System.Collections.IComparer». – s15199d

4

Благодаря caryden от: How do you sort a dictionary by value?

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

Вопросы, сообщенных выше, были из-за неправильного зацикливание.

Смежные вопросы