go - 删除元素方法在 Golang 中不起作用

标签 go slice

我有一个简单的代码,用于从 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/

相关文章:

go - 责任链-当前失败时如何调用特定处理程序

go - 如何在没有泛型的情况下对这种复合类型层次结构进行建模

go - 导入副作用

python - [...,::-1] 如何在切片表示法中工作?

string - 一行将golang中的[]int转为[]string

3d - 切片 NURBS 曲面

javascript - 查找字符串中同时也是后缀的最长前缀 - Javascript

go - 混淆 channel 控制流

search - 去二分查找错误

python - 根据输入对大列表进行切片