如何从切片中删除最后一个元素?

我见过有人说只要添加旧的就可以创建一个新的切片

*slc = append(*slc[:item], *slc[item+1:]...)

但是,如果要删除切片中的最后一个元素,该怎么办呢?

如果尝试用 i+1替换 i(最后一个元素) ,它将返回一个出界错误,因为没有 i+1

69595 次浏览

您可以使用 len()查找长度并使用最后一个元素之前的索引重新切片:

if len(slice) > 0 {
slice = slice[:len(slice)-1]
}

Click here to see it in the playground

译者:

myslice = myslice[:len(myslice) - 1]

如果 myslice的大小为零,则此操作将失败。

更详细的回答:

切片是指向底层数组的数据结构,像切片这样的操作使用相同的底层数组。

这意味着如果您切割一个切片,新的切片将仍然指向与原始切片相同的数据。

通过执行上述操作,最后一个元素仍然在数组中,但是您不能再引用它了。

如果你把切片切成原来的长度,你就可以引用最后一个对象了

如果您有一个非常大的切片,并且还想修剪底层数组以节省内存,那么可能需要使用“复制”来创建一个具有较小底层数组的新切片,并让旧的大切片被垃圾收集。