我有一个如下所示的字典,其中键是一个整数,值是一个字符串列表:
var x = new Dictionary<int, List<string>>;
我想看看这些列表中是否有任何列表相互匹配(不按顺序排列),以便我可以将它们组合在一起。
最终解决方案看起来像
var y = new Dictionary<string, List<int>>
List<int>
是来自var x
的键。字符串键是机器生成的字符串,例如guid等。
答案 0 :(得分:2)
您可以将所有值映射到其键,然后按值对其进行分组,然后应用ToDictionary,以获得预期结果。
var data = new Dictionary<int, List<string>>
{
{ 1, new List<string> { "Adam", "Lucie" } },
{ 2, new List<string> { "Adam", "Hannah" } },
{ 3, new List<string> { "John", "Rachel" } },
{ 4, new List<string> { "Bill", "Hannah" } },
};
var result = data.SelectMany(p => p.Value.Select(v => new {Key = p.Key, Value = v}))
.GroupBy(o => o.Value)
.ToDictionary(g => g.Key, g => g.Select(v => v.Key));
foreach (var keyValues in result)
{
Console.WriteLine(keyValues.Key + ": " + string.Join(", ", keyValues.Value));
}