我见过人们说只需通过添加旧的
来创建一个新的切片*slc = append(*slc[:item], *slc[item+1:]...)
但是如果你想删除切片中的最后一个元素呢?
如果您尝试将i
(最后一个元素)替换为i+1
,则会返回一个越界错误,因为没有i+1
。
答案 0 :(得分:29)
您可以使用len()
查找长度并使用最后一个元素之前的索引重新切片:
if len(slice) > 0 {
slice = slice[:len(slice)-1]
}
答案 1 :(得分:3)
<强> TL; DR:强>
myslice = myslice[:len(myslice) - 1]
顺便说一句,如果&#34; myslice&#34;是零大小。
更长的回答:
myslice = myslice[:len(myslice) - 1]
如果&#34; myslice&#34;这将失败是零大小。
切片是指向底层数组的数据结构,切片切片等操作使用相同的底层数组。
这意味着如果切片,新切片仍将指向与原始切片相同的数据。
通过执行上述操作,最后一个元素仍将在数组中,但您将无法再引用它。
修改强>
澄清: 如果将切片重新定位到其原始长度,则您将能够引用最后一个对象
<强> /修改
如果你有一个非常大的切片,并且你想修剪底层数组以节省内存,你可能想要使用&#34; copy&#34;创建一个具有较小底层数组的新切片,并让旧的大切片进行垃圾回收。