第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Golang 檢查結(jié)構(gòu)切片中的現(xiàn)有項(xiàng)目

Golang 檢查結(jié)構(gòu)切片中的現(xiàn)有項(xiàng)目

Go
三國(guó)紛爭(zhēng) 2022-10-24 10:19:04
假設(shè)我有以下結(jié)構(gòu):type A struct {    Field1 string    Field2 string}type B struct {    Field3 string    Field4 int}還有一個(gè)使用前兩個(gè)的結(jié)構(gòu):type C struct {    A    MyList []B}現(xiàn)在,我有一些數(shù)據(jù)要分組并映射到一個(gè)C結(jié)構(gòu)中并返回一個(gè)切片C:var results []C我有一個(gè)結(jié)構(gòu)片段,看起來(lái)像(因?yàn)槿绻赡馨l(fā)生我們重復(fù) A 的片段):type X struct {    A    B}所以我想按 A 對(duì)結(jié)果進(jìn)行分組。為此,我將遍歷我的方法作為參數(shù)接收的 X 切片:var results []C// Y is an slice of Xs for _, elem := range Y {    // If elem.A exists then append elem.B into C.A    // If not then add elem.A and elem.B into C}如何實(shí)現(xiàn)上述評(píng)論中所述的東西?我的意思是,我如何檢查結(jié)構(gòu)A切片中是否已經(jīng)存在結(jié)構(gòu)C?
查看完整描述

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í)行附加操作。


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)