从切片中删除一个元素会复制 Go 中的最后一个元素?
Removing an element from a slice duplicates the last element in Go?
我在 go 中使用 slices 来更好地理解这种行为。
我写了下面的代码:
func main() {
// Initialize
myslice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
newSlice := myslice
fmt.Println(myslice)
fmt.Println(newSlice)
removeIndex := 3
newSlice = append(newSlice[:removeIndex], newSlice[removeIndex+1:]...)
fmt.Println(myslice)
fmt.Println(newSlice)
}
这是输出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 2 3 5 6 7 8 9 9]
[1 2 3 5 6 7 8 9]
我真的不明白 newSlice 在末尾复制 9 会发生什么。另外,这是否意味着此操作从基础数组中删除给定元素?
append
操作只是简单地移动底层数组的元素。 newSlice
和 mySlice
是两个具有相同底层数组的切片。唯一不同的是两者的长度:append
之后,newSlice
有8个元素,而mySlice
仍然有9个元素。
我在 go 中使用 slices 来更好地理解这种行为。 我写了下面的代码:
func main() {
// Initialize
myslice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
newSlice := myslice
fmt.Println(myslice)
fmt.Println(newSlice)
removeIndex := 3
newSlice = append(newSlice[:removeIndex], newSlice[removeIndex+1:]...)
fmt.Println(myslice)
fmt.Println(newSlice)
}
这是输出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 2 3 5 6 7 8 9 9]
[1 2 3 5 6 7 8 9]
我真的不明白 newSlice 在末尾复制 9 会发生什么。另外,这是否意味着此操作从基础数组中删除给定元素?
append
操作只是简单地移动底层数组的元素。 newSlice
和 mySlice
是两个具有相同底层数组的切片。唯一不同的是两者的长度:append
之后,newSlice
有8个元素,而mySlice
仍然有9个元素。