0

任意の量の Dictionary インスタンスをマージしたい。キーが複数回発生する場合は、アクションを実行したいcurrentResultValue += newFoundValue

サンプル コンテキスト: Map/Reduce パターン、Reduce ステップ、非常に大きなテキスト内の単語の出現回数を数え、10 個のマッピングを行い、それぞれがDictionary<string, int>. reduce 呼び出しでは、これらすべての辞書を 1 つにマージしたいと考えています。

入力例:

Dictionary 1:
    "key1" -> 5
    "key2" -> 3

Dictionary 2:
    "key2" -> 1

Dictionary 3:
    "key1" -> 2
    "key3" -> 17

期待される結果:

"key1" -> 7
"key2" -> 4
"key3" -> 17

私はLINQベースのソリューションを好みます。たとえば、次のようなものです。

IEnumerable<IDictionary<string, int>> myDictionaries = ...;
myDictionaries.Reduce((curValue, newValue) => curValue + newValue);

拡張メソッドを自分で作成する必要がありますか、またはそのようなものが既に存在しますか?

4

2 に答える 2

1
var result = myDictionaries.SelectMany(x=>x)
                           .GroupBy(d=>d.Key)
                           .Select(g=> new KeyValuePair<string,int>(g.Key, g.Sum(x=>x.Value)))
                           .ToDictionary(k=>k.Key,v=>v.Value);
于 2013-08-24T19:49:53.050 に答える