2013-04-26 17 views
5

स्विच करने के लिए मैं इस संरचना है:Linq GroupBy आयाम

 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 का उपयोग कैसे कर सकते हैं कि ऐसा करने के लिए? क्या मैं ग्रुपबी का उपयोग करता हूं?

धन्यवाद

उत्तर

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 
} 
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()); 
संबंधित मुद्दे