合并IDictionary - 有没有比这更有效的方法?

时间:2012-05-01 13:58:11

标签: c# performance

我有一个帮助器,通过连接IDictionary<TKey, TValue>的{​​{1}}方法,将两个或多个IDictionary<TKey, string>个对象合并为一个TValue

ToString()

虽然这很简单易读,但似乎应该有一种更有效的方法来做到这一点。有吗?

3 个答案:

答案 0 :(得分:7)

我不知道这是否更有效,但至少它更短:

var result = dictionaries.SelectMany(d => d)
                         .ToLookup(kvp => kvp.Key, kvp => kvp.Value)
                         .ToDictionary(g => g.Key, g => string.Concat(g));

答案 1 :(得分:1)

您可以使用foreach删除可见 SelectMany

foreach (var kvp in dictionaries.SelectMany(dd => dd))
{
    if (returnValue.ContainsKey(kvp.Key))
    {
        returnValue[kvp.Key] += kvp.Value.ToString();
    }
    else
    {
        returnValue[kvp.Key] = kvp.Value.ToString();
    }
}

你可以进一步扩展,although dtb's is more elegant and efficient

var merged = dictionaries.SelectMany(dd => dd)
                         .GroupBy(kvp => kvp.Key, kvp => kvp.Value)
                         .ToDictionary(
                             gg => gg.Key,
                             gg => String.Concat(gg));

但是,这可能不比您当前的方法更有效或可读。

答案 2 :(得分:0)

您可以使用TryGetValue来合并源值的位置和检索。