我有一个简单的代码,用于从 slice 中删除元素:
package main
import "fmt"
func main() {
values := []string{"1", "2", "3", "4", "5"}
valuesResult := removeElementByIndex(values2, 0)
fmt.Printf("%v - %v\n", values, valuesResult)
}
func removeElementByIndex[T interface{}](a []T, i int) []T {
return append(a[:i], a[i+1:]...)
}
但是输出是
[2 3 4 5 5] - [2 3 4 5]
由于某种原因值
正在改变,但我没有在我的方法中改变它(我猜)。请帮我解决这个问题
最佳答案
您确实更改了原始 slice 。如果附加操作的结果适合 slice 的容量,则附加
操作将使用原始 slice 。
如果您需要原始 slice 不变:
func removeElementByIndex[T interface{}](a []T, i int) []T {
result := make([]T, len(a)-1)
copy(result,a[:i])
copy(result[i:],a[i+1:])
return result
}
关于go - 删除元素方法在 Golang 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76585020/