gpt4 book ai didi

c# - 转换集合

转载 作者:太空狗 更新时间:2023-10-29 17:48:26 25 4
gpt4 key购买 nike

有一个对象的集合。示意性地:

[
{ A = 1, B = 1 }
{ A = 1, B = 2 }
{ A = 2, B = 3 }
{ A = 2, B = 4 }
{ A = 1, B = 5 }
{ A = 3, B = 6 }
]

需要:

[
{ A = 1, Bs = [ 1, 2 ] }
{ A = 2, Bs = [ 3, 4 ] }
{ A = 1, Bs = [ 5 ] }
{ A = 3, Bs = [ 6 ] }
]

这样的 LINQ 有可能吗?

注意:顺序很重要。所以 Bs = [5] 不能与 Bs = [1, 2]

合并

最佳答案

给定这些简单的类:

class C {
public int A;
public int B;
}
class R {
public int A;
public List<int> Bs = new List<int>();
}

你可以这样做:

var cs = new C[] {
new C() { A = 1, B = 1 },
new C() { A = 1, B = 2 },
new C() { A = 2, B = 3 },
new C() { A = 2, B = 4 },
new C() { A = 1, B = 5 },
new C() { A = 3, B = 6 }
};

var rs = cs.
OrderBy(o => o.B).
ThenBy(o => o.A).
Aggregate(new List<R>(), (l, o) => {
if (l.Count > 0 && l.Last().A == o.A) {
l.Last().Bs.Add(o.B);
}
else {
l.Add(new R { A = o.A, Bs = { o.B } });
}
return l;
});

注意:在上面我假设必须对 B 和 A 进行排序。如果不是这种情况,只需删除排序说明即可:

var rs = cs.
Aggregate(new List<R>(), (l, o) => {
if (l.Count > 0 && l.Last().A == o.A) {
l.Last().Bs.Add(o.B);
}
else {
l.Add(new R { A = o.A, Bs = { o.B } });
}
return l;
});

关于c# - 转换集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com