Сортировка словаря по значению с помощью linq в vb.net - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь отсортировать словарь по значению с помощью LINQ, но не могу понять, как работает метод ToDictionary ().

Все примеры, которые я могу найти, находятся в c #.

вот мой код

Dim f As Dictionary(Of String, String) =  (From value In projectDescriptions.Values
                                           Order By value Ascending
                                           Select value).ToDictionary(???)

UPDATE

Наконец, я только что понял, что это глупо. К сожалению

Я сделал список (из keyValuePair (из строки, строки))

И чтобы отсортировать мой список, я делаю

mylist.OrderBy(Function(x) x.Value).ToList()

надеюсь, это кому-нибудь поможет

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Вы сказали, что не нашли пример этого, но отметьте MSDN здесь . Что-то вроде следующего должно работать в VB.

'not sure what the key is, but use whichever property you'd like
Dim f As Dictionary(Of String, String) =  
      (From value In projectDescriptions.Values
      Order By value Ascending
      Select value).ToDictionary(Function(p) p.Key)

Но если вы снова сохраните отсортированный перечислитель в словаре, он станет несортированным , это свойство словаря или карты в целом и именно поэтому словари так быстро и популярны. Если вам это нужно отсортировать, возможно, вы хотите использовать SortedDictionary вместо?

3 голосов
/ 23 марта 2012

Можно ли просто использовать SortedDictionary ?


Также в C # то, что вы хотите достичь, будет выглядеть следующим образом:

// enumerate dic itself, not just dic.Values
(from p in dic
orderby p.Value ascending
select new KeyValuePair<string, string>(p.Key, p.Value)
 // or new { Key = p.Key, Value = p.Value })
    .ToDictionary(p => p.Key, p => p.Value);

что такое же

dic.OrderBy(p => p.Value).ToDictionary(p => p.Key, p => p.Value);
                   // or .ToDictionary(p => p.Key);
1 голос
/ 23 марта 2012

Словарь не дает никаких гарантий о порядке записей.Я предлагаю Вам выбрать записи и преобразовать их в Список этих KeyValuePairs:

Dim f = projectDescriptions.OrderBy(Function(p) p.Value).ToList()

Обновление: Если вы посмотрите документацию по MSDN , вы будетеобнаружите, что в нем явно указано, что «порядок, в котором возвращаются элементы, не определен».Серьезно. не ожидайте, что словарь будет упорядочен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...