我有以下一组数字:
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()
});
结果:
关于c# - 具有唯一键和值的组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137632/