首页 > 解决方案 > 使用 LINQ 在数组元素内部进行分组

问题描述

例如:

var a = new { Key = new[] {1, 2} ... };
var b = new { Key = new[] {2, 3} ... };
var c = new { Key = new[] {3} ... };

我想要一个 LINQ 查询,它会在下面得到结果new [] {a, b, c}.GroupByWithArray(x => x.Key)

Key 1: a
Key 2: a, b
Key 3: b, c

标签: c#linq

解决方案


这似乎是您想要的最合乎逻辑的:

var a = new { Key = new[] { 1, 2 } };
var b = new { Key = new[] { 2, 3 } };
var c = new { Key = new[] { 3 } };

var values = new[] { 'a', 'b', 'c' };

var result =
    new[] { a, b, c }
        .Zip(values, (keys, value) => new { keys, value })
        .SelectMany(x => x.keys.Key, (x, key) => new { key, x.value })
        .GroupBy(x => x.key, x => x.value);

var output =
    String.Join(
        Environment.NewLine,
        result.Select(r => $"Key {r.Key}: {String.Join(", ", r)}"));

这给出了:

关键1:
键 2:a,b
键 3:b,c

现在,我不知道您...的问题是什么意思,但是如果我只是假设您的意思是列表可以更长,那么这不会改变任何事情。


推荐阅读