聚合用户列表(字符串)

时间:2016-06-08 19:30:32

标签: c#

我有一个如下所示的字典,其中键是一个整数,值是一个字符串列表:

var x = new Dictionary<int, List<string>>;

我想看看这些列表中是否有任何列表相互匹配(不按顺序排列),以便我可以将它们组合在一起。

最终解决方案看起来像

var y = new Dictionary<string, List<int>>

List<int>是来自var x的键。字符串键是机器生成的字符串,例如guid等。

1 个答案:

答案 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));
}