2013-08-07 4 views
0

У меня есть таблица, представленная как List из Dictionary из KeyValue пар.Получить максимальную длину столбца для каждого столбца в таблице, представленной списком словарей

Каждый словарь в списке представляет собой строку в таблице и имеет тот же набор ключей (имена столбцов). Для каждой клавиши значение представляет собой значение столбца в текущей строке.

Теперь я пытаюсь написать элегантное выражение лямбда для вычисления максимальной длины столбца для каждого столбца в таблице.

Вот как я это делаю сегодня:

// 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 лайнера. Есть идеи?

ответ

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