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

时间:2014-10-03 01:49:29

标签: go

我见过人们说只需通过添加旧的

来创建一个新的切片
*slc = append(*slc[:item], *slc[item+1:]...)

但是如果你想删除切片中的最后一个元素呢?

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

2 个答案:

答案 0 :(得分:29)

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

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

Click here to see it in the playground

答案 1 :(得分:3)

<强> TL; DR:

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

顺便说一句,如果&#34; myslice&#34;是零大小。

更长的回答:

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

如果&#34; myslice&#34;这将失败是零大小。

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

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

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

修改

澄清: 如果将切片重新定位到其原始长度,则您将能够引用最后一个对象

<强> /修改

如果你有一个非常大的切片,并且你想修剪底层数组以节省内存,你可能想要使用&#34; copy&#34;创建一个具有较小底层数组的新切片,并让旧的大切片进行垃圾回收。