SortedList со значением и упрощенными циклами с лямбдой

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

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 ответа

Решение

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

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

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

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

foreach (var a in alpha.OrderByDescending(x => x.Value))
    A.Add(a.Key + ":" + a.Value);
Другие вопросы по тегам