C# 如何在C中透视键和数组集合?

C# 如何在C中透视键和数组集合?,c#,dictionary,C#,Dictionary,假设我有一组从字符串到小数的键,如下所示: { "Alfred", [1, 2] } { "Batman", [1, 2, 3] } 如何在C中轻松地将此关系转换为集合的位置: { 1, ["Alfred", "Batman"] } { 2, ["Alfred", "Batman"] } { 3, ["Batman" ] } 您可以使用LINQ: var d = new Dictionary<string,int[]>{ {"Alfred", new[] {1,2}} ,

假设我有一组从字符串到小数的键,如下所示:

{ "Alfred", [1, 2] }
{ "Batman", [1, 2, 3] }
如何在C中轻松地将此关系转换为集合的位置:

{ 1, ["Alfred", "Batman"] }
{ 2, ["Alfred", "Batman"] }
{ 3, ["Batman" ] }
您可以使用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));
请注意g=>g.Key和g=>g.Selectv=>v.Key之间的区别:前者选择组的键,而后者选择原始词典的键。

您可以使用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));
请注意g=>g.Key和g=>g.Selectv=>v.Key之间的区别:前者选择组的键,而后者选择原始词典的键