Linq Group可以切换尺寸

use*_*169 5 c# linq

我有这个结构:

        var data1 = new Dictionary<int, List<string>>
            {
                { 1, new List<string> { "A", "B", "C" } }, 
                { 2, new List<string> { "B", "C" } }
            };
Run Code Online (Sandbox Code Playgroud)

我需要将它转换为这个结构:

        var data2 = new Dictionary<string, List<int>>
            {
                { "A", new List<int> { 1 } }, 
                { "B", new List<int> { 1, 2 } },
                { "C", new List<int> { 1, 2 } }
            };   
Run Code Online (Sandbox Code Playgroud)

我如何使用Linq来做到这一点?我使用GroupBy吗?

谢谢

Jon*_*eet 6

肯定需要它是一个Dictionary<string, List<int>>或类似的东西吗?我SelectMany用来压扁,然后ToLookup:

var data2 = data1.SelectMany(pair => pair.Value, (p, v) => new { p.Key, Value = v })
                 .ToLookup(x => x.Value, x => x.Key);
Run Code Online (Sandbox Code Playgroud)

然后你仍然可以像使用它一样使用它:

foreach (var x in data2["B"])
{
    Console.WriteLine(x); // Prints 1 then 2
}
Run Code Online (Sandbox Code Playgroud)