比较两个切片是否缺少元素

RK8*_*844 5 arrays go

我有两片:a []string, b []string. b包含所有相同的元素加上a一个额外的元素。索引:值彼此不匹配,但值匹配,否则我可以执行类似 和strings.Join()的操作strings.Replace()。这就是我正在尝试的。

package main

import (
    "fmt"
    "github.com/google/go-cmp/cmp"
)

func compare(start_keys []string, end_keys []string) string {
    match := make([]string, len(start_keys))
    q := 0
    for i := 0; i < len(end_keys); i++ {
        for z := 0; z < len(start_keys); z++ {
            if end_keys[i] == start_keys[z] {
                match[q] = start_keys[z]
                q++
            }
        }
    } // now matches known

    for i := 0; i < len(end_keys); i++ {
        n := end_keys[i]   // current element to compare to
        s := nip(match, n) // compare result
        if s == true {     // if no matches, print
            a := end_keys[i]
            fmt.Println("Not present: ", a)
        }
        i++
    }
    fmt.Println("List=", match)
    return "error"
}

func nip(matches []string, element string) bool {
    zyx := 0
    for n := 0; n < len(matches); n++ {
        if matches[n] == element {
            n++
            zyx++
        } else if matches[n] != element {
            n++
        }
    }
    if zyx == 0 {
        return true
    }
    return false
}

func main() {
    start_keys := []string{"a", "b", "c", "d", "e", "f", "g"}
    end_keys := []string{"a", "1sdsdfsdfsdsdf", "c", "d", "e", "f", "g", "b"}

    x := compare(start_keys, end_keys)

    x = x
    foo := cmp.Diff(start_keys, end_keys)
    fmt.Println(foo)
}
Run Code Online (Sandbox Code Playgroud)

matches[]符合我的预期,但nip()在某些匹配项上返回 true,而不是针对唯一值1sdsdfsdfsdsdf

a
a :::: a
c
a :::: c
d :::: c
f :::: c
b :::: c
Not present:  c
e
a :::: e
d :::: e
f :::: e
b :::: e
Not present:  e
g
a :::: g
d :::: g
f :::: g
b :::: g
Run Code Online (Sandbox Code Playgroud)

pet*_*rSO 5

比较两个切片是否缺少元素

我有两片:a []string, b []string. b包含所有相同的元素加上a一个额外的元素。

例如,

package main

import (
    "fmt"
)

func missing(a, b []string) string {
    ma := make(map[string]bool, len(a))
    for _, ka := range a {
        ma[ka] = true
    }
    for _, kb := range b {
        if !ma[kb] {
            return kb
        }
    }
    return ""
}

func main() {
    a := []string{"a", "b", "c", "d", "e", "f", "g"}
    b := []string{"a", "1sdsdfsdfsdsdf", "c", "d", "e", "f", "g", "b"}
    fmt.Println(missing(a, b))
}
Run Code Online (Sandbox Code Playgroud)

输出:

1sdsdfsdfsdsdf
Run Code Online (Sandbox Code Playgroud)