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

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

如何更快地獲得2個(gè)列表之間的交集

如何更快地獲得2個(gè)列表之間的交集

Go
慕桂英3389331 2022-10-04 16:24:00
我有2個(gè)列表,一個(gè)列表元素類型是結(jié)構(gòu)A,另一個(gè)列表元素類型是結(jié)構(gòu)B,結(jié)構(gòu)A和結(jié)構(gòu)B之間有公共字段。如何獲取在 2 個(gè)列表之間具有相同內(nèi)容的交集元素,并使用 golang 避免 o(n^2) 時(shí)間復(fù)雜度。string namenametype structA struct {   name string   ....}type structB struct {   name string   ..}注意:每個(gè)列表中的字段不是唯一的,因此轉(zhuǎn)換地圖的方式不是解決方案name
查看完整描述

2 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

擁有不唯一的列表并不妨礙您使用地圖;您可以執(zhí)行如下操作(游樂場):


package main


import (

    "fmt"

)


func main() {

    type structA struct {

        name       string

        otherfield int

    }

    type structB struct {

        name           string

        differentField bool

    }


    aSlice := []structA{

        {name: "foo", otherfield: 1},

        {name: "foo", otherfield: 2},

        {name: "unique", otherfield: 3},

        {name: "one", otherfield: 4},

    }

    bSlice := []structB{

        {name: "foo", differentField: true},

        {name: "foo", differentField: false},

        {name: "noIntersection", differentField: true},

        {name: "one", differentField: false},

    }


    inA := make(map[string][]interface{})

    for _, a := range aSlice {

        inA[a.name] = append(inA[a.name], a)

    }


    intersect := make(map[string][]interface{})

    for _, b := range bSlice {

        if _, ok := intersect[b.name]; ok {

            intersect[b.name] = append(intersect[b.name], b)

            continue

        }

        if a, ok := inA[b.name]; ok {

            intersect[b.name] = append(a, b)

            continue

        }


    }

    fmt.Println(intersect)

}


查看完整回答
反對 回復(fù) 2022-10-04
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

我想你可以嘗試在戈朗使用地圖。平均復(fù)雜度時(shí)間是 O(n),因?yàn)?golang 中的映射基于哈希表。示例代碼:


aMap := make(map[string][]*structA)

for _,a := range aList {

    aMap[a.name] = append(aMap[a.name], a)

}

bMap := make(map[string][]*structB)

for _,b := range bList {

    bMap[b.name] = append(bMap[b.name], b)

}

//get an intersection of aList and bList

itersections := make([]*structB, 0, len(aList))

for k,v := range aMap {

    if b, ok := bMap[k];ok {

        itersections = append(intersections, b...)

    }

}


查看完整回答
反對 回復(fù) 2022-10-04
  • 2 回答
  • 0 關(guān)注
  • 115 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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