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);
alpha.OrderByDescending(x => x.Value);
не сортирует по значению, но сортирует по ключу. Могу ли я узнать, в чем проблема с кодом?могу ли я упростить:
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);