2013-08-07 177 views
0

我有一個表格,表示爲ListDictionaryKeyValue對。獲取表中列表中每列的最大列長度

列表中的每個字典都表示表中的一行,並具有相同的一組鍵(列名稱)。對於每個鍵,該值都是當前行中的列值。

現在,我正在嘗試編寫一個優雅的lambda表達式來計算表中每列的最大列長度。

這是我今天怎麼做到這一點:

// Get max column lengths 
var maxColumnLengths = new Dictionary<string, int>(); 
foreach (var row in dics) 
{ 
    foreach (var col in row) 
    { 
     if (!maxColumnLengths.ContainsKey(col.Key)) 
     { 
      maxColumnLengths.Add(col.Key, 0); 
     } 

     if (maxColumnLengths[col.Key] < col.Value.ToString().Length) 
     { 
      maxColumnLengths[col.Key] = col.Value.ToString().Length; 
     } 
    } 
} 

我試圖把它做成一個1/2襯墊lambda表達式。有任何想法嗎?

回答

2

你可以做到這一點在單LINQ查詢:

var source = new List<Dictionary<string, object>>(); 

// (...) 

var maxColumnLengths = source.SelectMany(x => x) 
          .GroupBy(x => x.Key) 
          .ToDictionary(g => g.Key, 
              g => g.Max(x => x.Value.ToString().Length)); 
相關問題