我有以下数据
IEnumerable<Tuple<T, List<U>>> Data;
Run Code Online (Sandbox Code Playgroud)
或者也可以表达为
Dictionary<T, List<U>> GroupedA
Run Code Online (Sandbox Code Playgroud)
给出一个T它可能属于一个或多个U.我想反转这个,所以我可以查找U并找到结构中所有相关的T
Dictionary<U, List<T>> GroupedB;
Run Code Online (Sandbox Code Playgroud)
试着想出一个简洁的LINQ表达式来反转字典.
编辑
实际上,下面的正确答案表明我真正想要的是
ILookup<U, T>
Run Code Online (Sandbox Code Playgroud)
而不是
Dictionary<U, List<T>>
Run Code Online (Sandbox Code Playgroud)
//Populating data
Dictionary<int, List<string>> GroupedA = new Dictionary<int, List<string>>();
GroupedA.Add(1, new List<string>{"1","2","3"});
GroupedA.Add(2, new List<string>{"1","32","3","4"});
GroupedA.Add(3, new List<string>{"1","52","43","4"});
//Inverting data
ILookup<string, int> GroupedB =
GroupedA.SelectMany(pair => pair.Value.Select(val => new{pair.Key, val}))
.ToLookup(pair => pair.val, pair => pair.Key);
//Printing data
var pairs = GroupedB.Select(pair => string.Format("{0} : {1}", pair.Key, string.Join(",", pair)));
Console.WriteLine (string.Join(Environment.NewLine, pairs));
Run Code Online (Sandbox Code Playgroud)
打印:
1 : 1,2,3
2 : 1
3 : 1,2
32 : 2
4 : 2,3
52 : 3
43 : 3
Run Code Online (Sandbox Code Playgroud)