SortedList со значением и упрощенные циклы с лямбдой - PullRequest
0 голосов
/ 30 января 2012

У меня здесь блок кодов:

SortedList<char, int> alpha = new SortedList<char, int>();
List<string> A = new List<string>();
alpha.OrderByDescending(x => x.Value);
foreach (var a in alpha)
    A.Add(a.Key + ":" + a.Value);
  1. alpha.OrderByDescending(x => x.Value); не сортирует по значению, но сортирует по ключу.Могу я узнать, в чем проблема с кодом?

  2. Могу ли я упростить:

    foreach (var a in alpha) A.Add(a.Key + ":" + a.Value);

в одну лямбдузаявление?что-то вроде

alpha.ForEach(x => A.Add(a.Key + ":" + a.Value));

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Оператор alpha.OrderByDescending(x => x.Value); не имеет никакого эффекта ... Операторы Linq ленивы, они не выполняются, пока вы не перечислите их результат.Поскольку вы не используете результат OrderByDescending, он просто создает ленивую последовательность, которая будет давать элементы alpha, отсортированные по значению, , если вы перечислили его.. OrderByDescending не сортирует коллекцию, она просто возвращает отсортированную последовательность элементов из коллекции, не изменяя саму коллекцию.

Вы должны сделать это так:

foreach (var a in alpha.OrderByDescending(x => x.Value))
    A.Add(a.Key + ":" + a.Value);
2 голосов
/ 30 января 2012

Это может помочь:

SortedList<char, int> alpha = new SortedList<char, int>();
alpha.Add('B',1);
alpha.Add('A',2);
alpha.Add('C',3);
var A= alpha.OrderByDescending(a =>a.Value)
        .Select (a =>a.Key+":"+a.Value)
        .ToList();
...