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

sou*_*cey 25 go

我见过人们说只是通过追加旧片来创建一个新片

*slc = append(*slc[:item], *slc[item+1:]...)
Run Code Online (Sandbox Code Playgroud)

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

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

Sim*_*ead 37

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

if len(slice) > 0 {
    slice = slice[:len(slice)-1]
}
Run Code Online (Sandbox Code Playgroud)

Click here to see it in the playground

  • 此外,no:=,slice已经定义.:) (4认同)

Dal*_*osa 9

长话短说:

myslice = myslice[:len(myslice) - 1]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果“myslice”大小为零,这将会失败。

更长的答案:

myslice = myslice[:len(myslice) - 1]
Run Code Online (Sandbox Code Playgroud)

如果“myslice”大小为零,这将失败。

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

这意味着,如果您对切片进行切片,新切片仍将指向与原始切片相同的数据。

通过执行上述操作,最后一个元素仍将位于数组中,但您将无法再引用它。

编辑

说明:如果将切片重新切片为其原始长度,您将能够引用最后一个对象

/编辑

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