0

所以我有一个这样定义的并发字典

 ConcurrentDictionary<string, ConcurrentDictionary<string, ConcurrentDictionary<string, SomeObject>>>();

我知道这似乎有点令人费解,但结构是有效的......

现在我的问题是,我已经为 x 个不同的来源说了 x 个这些字典的实例,出于统计目的,它们需要被合并/合并/聚合到一个相同结构的字典中......

有人对最佳方法有任何想法吗?我知道我可以创建一个相同结构的新字典;循环遍历要合并的每个字典,并在每个级别检查新字典中的这些键等,并根据该确定的结果添加或更新...

但这对我来说似乎有点笨拙......那里有任何可以伸出援助之手的 LINQ 天才吗?

[注意 - 我刚刚做了一个重要的编辑 - 输出字典与输入字典的结构完全相同]

4

1 回答 1

1

LINQ 在这里没有帮助,因为您不想查询集合而是操作集合。

正如上面评论中所说,使用 aConcurrentDictionary<Tuple<string, string, string>, SomeObject>会简化一些事情。您可以执行以下操作:

using MyDict = ConcurrentDictionary<Tuple<string, string, string>, SomeObject>;

MyDict Merge(IEnumerable<MyDict> dicts)
{
    MyDict result = new MyDict();

    foreach (var dict in dicts)
    {
        foreach (var kvp in dict)
        {
            result.AddOrUpdate(
                kvp.Key,        // If the key does not exist, add the value;
                kvp.Value,      // otherwise, combine the two values.
                (key, value) => Combine(value, kvp.Value)
            );
        }
    }

    return result;
}
于 2012-11-19T12:17:20.713 回答