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 に答える