尝试使用append删除字符串数组中的连续项

时间:2018-01-21 17:14:49

标签: go append

我无法理解以下结果。我期待代码

package main
import "fmt"

func main() {
    fruits := []string{"apple", "banana", "orange", "kiwi", "ananas"}
    for i, _ := range fruits {
        s := append(fruits[:i], fruits[i+1:]...)
        fmt.Println(s)
    }
}

返回:

[banana orange kiwi ananas]
[apple orange kiwi ananas]
[apple banana kiwi ananas]
[apple banana orange ananas]
[apple banana orange kiwi]

而是返回:

[banana orange kiwi ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]
我错过了什么? 注意:我注意寻找返回预期行为的代码,只是试图理解代码的作用。 游乐场:https://play.golang.org/p/CB73GYvY7aW

1 个答案:

答案 0 :(得分:4)

正如规范所说:

  

追加内置函数将元素附加到切片的末尾。如果它具有足够的容量,则会复制目标以容纳新元素。如果没有,将分配新的底层数组。 Append返回更新的切片。

在您的情况下,底层切片总是足够的,因此每次都会修改它。根据规范,结果是可以预期的。

每个循环的结果:

[banana orange kiwi ananas] [banana orange kiwi ananas ananas]
[banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
[banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
[banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
[banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]