减少数组长度

我正在尝试将两个字符串数组合并为一个。结果数组应删除所有重复元素。


func MergeArrays(str1, str2 []string) []string {

    c := make([]string, len(str1)+len(str2), cap(str1)+cap(str2))

    k := make(map[string]bool)

    for i, s := range str1 {

        if _, ok := k[s]; !ok {

            c[i] = s

            k[s] = true

        }

    }

    for j, s := range str2 {

        if _, ok := k[s]; !ok {

            c[j+len(str1)] = s

            k[s] = true

        }

    }

    return c

}

测试数据


str1 := []string{"a", "b"}

str2 := []string{"c", "d", "a"}

输出: "a", "b", "c", "d" length of the array "5"


我得到了我想要的输出,但数组的长度应该是4而不是5。我可以理解为什么它会打印5,但我想要长度为的输出数组4。还有其他方法可以合并两个数组。


蛊毒传说
浏览 245回答 2
2回答

炎炎设计

从长度为零开始,并在附加元素时加一。例如,package mainimport "fmt"func MergeArrays(a1, a2 []string) []string {    m := make([]string, 0, len(a1)+len(a2))    k := make(map[string]bool, len(a1)+len(a2))    for _, aa := range [][]string{a1, a2} {        for _, s := range aa {            if !k[s] {                m = append(m, s)                k[s] = true            }        }    }    return m}func main() {    a1 := []string{"a", "b"}    a2 := []string{"c", "d", "a"}    m := MergeArrays(a1, a2)    fmt.Println(len(m), m)}输出:4 [a b c d]

幕布斯6054654

它们是切片,而不是数组,这是解决您的用例的示例:package mainimport "fmt"func MergeStringSlices(str1, str2 []string) []string {    m := make([]string, len(str1), len(str1)+len(str2))    copy(m, str1)already_seen:    for _, s := range str2 {        for _, t := range m {            if s == t {                continue already_seen            }        }        m = append(m, s)    }    return m}func main() {    str1 := []string{"a", "b"}    str2 := []string{"c", "d", "a"}    fmt.Printf("%#v\n", MergeStringSlices(str1, str2))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go