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

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

嘗試在 Go 中實(shí)現(xiàn) Java Guava sets.difference

嘗試在 Go 中實(shí)現(xiàn) Java Guava sets.difference

Qyouu 2021-10-17 10:42:02
Java番石榴Sets.difference行為:Known = ["v1","v2"]; Incoming = ["v2","v3","v4"]incoming = ["v2","v3","v4"]; knownUpdated = ["v2"]Sets.difference(Known, Incoming) = v1 (To be removed)Sets.difference(incoming, knownUpdated) = v3,v4 (To be added)我在 Go 中嘗試過的有以下區(qū)別:Output := [v1 v3 v4] (known, Incoming) func Difference(slice1 []string, slice2 []string) []string {    var diff []string    for i := 0; i < 2; i++ {        for _, s1 := range slice1 {            found := false            for _, s2 := range slice2 {                if s1 == s2 {                    found = true                    break                }            }            if !found {                diff = append(diff, s1)            }        }        if i == 0 {            slice1, slice2 = slice2, slice1        }    }    return diff}它給出了對(duì)稱的差異,但我需要 Guava sets.difference 的行為。我知道我的函數(shù)有問題。來自番石榴文檔public static Sets.SetView difference(Set set1, Set set2):返回的集合包含由 set1 包含但由 set2 不包含的所有元素
查看完整描述

1 回答

?
天涯盡頭無女友

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

最直接和易于理解的解決方案是使用映射 - 如果您只使用鍵,丟棄值,它們與許多其他集合實(shí)現(xiàn)(O(1)查找*,唯一鍵,無序)共享相似的屬性。在這一點(diǎn)上,它實(shí)際上非常簡(jiǎn)單:


func Difference(slice1 []string, slice2 []string) []string {

    // Create proper "set" (Maps have unordered pairs and the keys are unique;

    // lookup to check whether value is present is O(1), similar to other

    // implementations)

    m := make(map[string]struct{}, len(slice1))

    for _, el := range slice1 {

        m[el] = struct{}{}

    }


    // Remove values from slice1 present in slice2

    for _, el := range slice2 {

        delete(m, el)

    }


    // Note that res will be non-deterministic: the order of iteration over maps

    // is made random on purpose by Go itself

    res := make([]string, 0, len(m))

    for k := range m {

        res = append(res, k)

    }

    return res

}


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

添加回答

舉報(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)