排序列表与价值,并简化环路与拉姆达

问题描述:

我这里的代码块:排序列表与价值,并简化环路与拉姆达

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

这可能帮助:

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); 
+0

感谢汤姆,但
变种A = alpha.OrderByDescending(A => a.value中) 。选择(a => a.Key +“:”+ a.Value) .ToList();
适合我 – alkk 2012-02-21 06:18:18