1

次のように、文字列から小数へのキーのコレクションがあるとします。

{ "Alfred", [1, 2] }
{ "Batman", [1, 2, 3] }

この関係をC#で簡単に反転して、コレクションがある場所にするにはどうすればよいですか:

{ 1, ["Alfred", "Batman"] }
{ 2, ["Alfred", "Batman"] }
{ 3, ["Batman" ] }
4

1 に答える 1

4

LINQを使用できます。

var d = new Dictionary<string,int[]>{
    {"Alfred", new[] {1,2}}
,   {"Batman", new[] {1,2,3}}
};
var res = d
    .SelectMany(p=>p.Value.Select(v => new {p.Key, Value = v}))
    .GroupBy(p => p.Value)
    .ToDictionary(g => g.Key, g => g.Select(v => v.Key).ToArray());
foreach (var p in res)
    Console.WriteLine("{0} = ({1})", p.Key, string.Join(", ", p.Value));

このコードは次の出力を生成します(ideone link):

1 = (Alfred, Batman)
2 = (Alfred, Batman)
3 = (Batman)

g => g.Keyとの違いに注意してくださいg => g.Select(v => v.Key)。前者はグループのキーを選択し、後者は元の辞書のキーを選択します。

于 2012-07-22T18:57:54.567 に答える