2012-01-30 43 views
0

我這裏的代碼塊:排序列表與價值,並簡化環路與拉姆達

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

聲明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