5

我有这个结构:

        var data1 = new Dictionary<int, List<string>>
            {
                { 1, new List<string> { "A", "B", "C" } }, 
                { 2, new List<string> { "B", "C" } }
            };

我需要将其转换为这种结构:

        var data2 = new Dictionary<string, List<int>>
            {
                { "A", new List<int> { 1 } }, 
                { "B", new List<int> { 1, 2 } },
                { "C", new List<int> { 1, 2 } }
            };   

我怎样才能使用 Linq 来做到这一点?我使用 GroupBy 吗?

谢谢

4

2 回答 2

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);

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

foreach (var x in data2["B"])
{
    Console.WriteLine(x); // Prints 1 then 2
}
于 2013-04-26T19:38:32.043 回答
2

你可以这样做:

var data2 =
    (from p in data1
     from v in p.Value
     group p by v)
    .ToDictionary(g => g.Key, g => g.Select(x => x.Key).ToList());
于 2013-04-26T19:39:12.217 回答