0

だから私はそのように定義された並行辞書を持っています

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

私はそれが少し複雑に見えることを知っていますが、構造は有効です...

今私の問題は、x個の異なるソースのこれらの辞書のインスタンスがx個あると言っていることです。統計的な目的で、同じ構造の1つの辞書にマージ/統合/集約する必要があります...

誰かが最善のアプローチについて何かアイデアはありますか?同じ構造の新しい辞書を作成できることはわかっています。統合される各辞書をループし、各レベルでそれらのキーなどの新しい辞書をチェックし、その決定の結果に基づいて追加または更新します...

しかし、それは私には少し扱いに​​くいようです...手を貸すことができるLINQの天才はいますか?

[注-重要な編集を1つ行っただけです-出力辞書は入力辞書とまったく同じ構造です]

4

1 に答える 1

1

コレクションをクエリするのではなく操作するため、LINQはここでは役に立ちません。

上記のコメントで述べたように、を使用するConcurrentDictionary<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 に答える