我见过的人都说只是通过附加旧如何从切片中删除最后一个元素?
*slc = append(*slc[:item], *slc[item+1:]...)
,但如果你想删除的最后一个元素切片什么创建一个新的片?
如果您尝试用i+1
替换i
(最后一个元素),由于没有i+1
,它将返回一个超出界限的错误。
我见过的人都说只是通过附加旧如何从切片中删除最后一个元素?
*slc = append(*slc[:item], *slc[item+1:]...)
,但如果你想删除的最后一个元素切片什么创建一个新的片?
如果您尝试用i+1
替换i
(最后一个元素),由于没有i+1
,它将返回一个超出界限的错误。
您可以使用len()
找到使用索引的最后一个元素前的长度和重排:
if len(slice) > 0 {
slice = slice[:len(slice)-1]
}
TL; DR:
myslice = myslice[:len(myslice) - 1]
顺便说一句,这将如果“myslice”为零,则失败。
较长的答案:
myslice = myslice[:len(myslice) - 1]
如果 “myslice” 是零大小这将失败。
切片是指向底层数组的数据结构,切片切片等操作使用相同的底层数组。
这意味着如果您切片,则新切片仍将指向与原切片相同的数据。
通过以上操作,最后一个元素仍然在数组中,但您将无法再引用它。
编辑
澄清: 如果您在重新分区分片到原来的长度,你就可以参考上一对象
/编辑
如果你有一个非常大片,你也想修剪底层数组来节省内存,你可能想用“复制”来创建一个更小的底层数组的新片,并让旧的大片得到垃圾回收。
如果'len(slice)== 0'会失败:'panic:runtime error:slice bounds out of range'。 – peterSO 2014-10-03 01:56:51
...好的,是的。这不是问题的一部分..但我会更新我的答案以帮助解决这个问题。 – 2014-10-03 01:57:36
另外,no:=,slice已经定义。 :) – LinearZoetrope 2014-10-03 02:00:50