c# - 具有唯一键和值的组数据

标签 c# .net linq group-by

我有以下一组数字:

1  137
1  143
11 37
11 46
11 132
46 65
46 139
69 90

现在,我需要按组值中不存在组键的方式按第一个值对数据进行分组。因此,例如,如果我只是对数据进行分组,我会得到这样的结果:

1  137
   143
11 37
   46
   132
46 65
   139
69 90

这里的46是第三组的组键,第二组的组值。在这种情况下,我需要将第三组的组值合并到第二组并删除第三组。 分组的最终结果应如下所示:

1  137
   143
11 37
   46
   132
   65
   139
69 90

我对 C# 比较陌生,所以我想知道是否有一种使用 LINQ 来完成它的奇特方法。

最佳答案

试试这个 LINQ 解决方案:

var numbers = new List<Number>
{
    new Number {X = 1, Y = 137},
    new Number {X = 1, Y = 143},
    new Number {X = 11, Y = 37},
    new Number {X = 11, Y = 46},
    new Number {X = 11, Y = 132},
    new Number {X = 46, Y = 65},
    new Number {X = 46, Y = 139},
    new Number {X = 69, Y = 90}
};
var result = numbers.GroupBy(c => c.X);
var result2 = numbers.FirstOrDefault(c => result.Select(d => d.Key).Contains(c.Y));

var finalResult = numbers.Where(x => x.X == result2?.Y)
                         .Select(x =>  { x.X = result2.X;x.Y = x.Y; return x; } )
                         .Union(numbers.Where(c => c.X != result2?.Y)).GroupBy(c => c.X ,
                         (key, element) => new
                         {
                             Key = key,
                            Element = element.Select(c => c.Y).ToList()
                         });

结果:

enter image description here

关于c# - 具有唯一键和值的组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137632/

相关文章:

javascript - 单击按钮发送 Ajax 调用并从 aspx.cs(代码隐藏)获取值到 aspx 页面并将其显示在同一页面的输入字段中

c# - 如何以编程方式训练我的 Google Cloud AutoML 自定义模型?

c# - 将字符串转换为 base64 时抛出异常

c# - AppDomain 间通信问题

c# - 如何使用 Linq 获得最高值(value)

mysql - 核心数据和 MySQL

c# - 在 Observable 完成后做点什么?

c# - 发布到文档库后获取项目 ID

c# - C# 中的邮件存储配额检查器

c# - 在内存中抓取 .net 进程