将concat返回两片

时间:2018-08-04 14:16:42

标签: arrays slice

我正在尝试编写一个将两个切片连接在一起的函数。但是无论我尝试什么,它都会返回类似

的内容

[1]空[2]空[3]空[4]切片[1]…

我不想有空索引。

package main

import "fmt"


func main() {
    var input string
    var list1  []string
    var list2  []string

    list1 = make([]string, 3)
    list2 = make([]string, 3)

    fmt.Println("Tell me three friends you like.")

    for i := 0; i < 3; i++ {
        fmt.Print("friend: ")
        fmt.Scanf("%s", &input)
        list1 = append(list1, input)
    }

    fmt.Println("tell me three family members you like.")
    for i := 0; i < 3; i++ {
        fmt.Print("family_member: ")
        fmt.Scanf("%s", &input)
        list2 = append(list2, input)
    }

    list := concat(list1, list2)

    for i := 0; i < 12; i++ {
        fmt.Println(list[i])
    }
}

func concat(a []string, b []string) []string {
    var list  []string
    list = make([]string, 6)
    list = append(list, a...)
    list = append(list, b...)
    return list
}

1 个答案:

答案 0 :(得分:0)

list1 = make([]string, 3)
list2 = make([]string, 3)

我想这会创建一个最多包含3个索引的切片。但是它将创建两个包含3个空索引的切片。稍后使用append()时,会将其追加到第4个索引。 (使slice的最大索引数为4,当我使该slice的索引最大为3时,这有点使我震惊。因此,上述两行需要更改为:

list1 = make([]string, 0)
list2 = make([]string, 0)

这样,不再有空索引。