1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
通常,當(dāng)您想按某個(gè)值聚合某些內(nèi)容時(shí),您會(huì)使用地圖。鍵將是您要聚合的值,A在您的情況下是類型。
這在這里也是最簡(jiǎn)單的,這只需要密鑰類型是可比較的。
您可以像這樣簡(jiǎn)單地收集數(shù)據(jù):
// Example data:
xs := []X{
{A{"a1", "a2"}, B{"b1", 2}},
{A{"a1", "a2"}, B{"b11", 22}},
{A{"a1", "a3"}, B{"b4", 5}},
}
m := map[A][]B{}
for _, x := range xs {
m[x.A] = append(m[x.A], x.B)
}
fmt.Println(m)
這將輸出:
map[{a1 a2}:[{b1 2} {b11 22}] {a1 a3}:[{b4 5}]]
如果您確實(shí)需要結(jié)果[]C,請(qǐng)遍歷地圖并填充它:
for a, bs := range m {
results = append(results, C{a, bs})
}
fmt.Println(results)
這將輸出:
[{{a1 a2} [{b1 2} {b11 22}]} {{a1 a3} [{b4 5}]}]
試試Go Playground上的示例。
如果有任何機(jī)會(huì)A無(wú)法比較,您將不得不求助于使用循環(huán)而不是映射查找,您必須手動(dòng)檢查等價(jià)性,如果找到匹配項(xiàng),您將執(zhí)行附加操作。
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)