0

我有一个表表示为一List对。DictionaryKeyValue

列表中的每个字典代表表中的一行,并且具有相同的键集(列名)。对于每个键,值是当前行中的列值。

现在,我正在尝试编写一个优雅的 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 表达式。有任何想法吗?

4

1 回答 1

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));
于 2013-08-07T08:00:07.167 回答