2013-08-07 133 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)); 
相关问题