gpt4 book ai didi

go - 尝试使用追加删除字符串数组中的连续项目

转载 作者:IT王子 更新时间:2023-10-29 02:28:56 26 4
gpt4 key购买 nike

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

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]

我错过了什么?注意:我注意到正在寻找返回预期行为的代码,只是想了解代码的作用。 Playground :https://play.golang.org/p/CB73GYvY7aW

最佳答案

正如规范所说:

The append built-in function appends elements to the end of a slice. If it has sufficient capacity, the destination is resliced to accommodate the new elements. If it does not, a new underlying array will be allocated. Append returns the updated slice.

在你的例子中,底层 slice 总是足够的,所以它每次都会修改它。根据规范,结果是可以预期的。

每个循环的s/fruit:

[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]

关于go - 尝试使用追加删除字符串数组中的连续项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com