我见过有人说只是通过附加旧切片来创建新切片
1 | *slc = append(*slc[:item], *slc[item+1:]...) |
但是,如果要删除切片中的最后一个元素怎么办?
如果尝试用
您可以使用
1 2 3 | if len(slice) > 0 { slice = slice[:len(slice)-1] } |
单击此处在操场上查看它
-
如果
len(slice) == 0 :panic: runtime error: slice bounds out of range ,则失败。 - ...嗯,是。 那不是问题的一部分..但是我将更新我的答案以帮助您。
- 同样,没有:=,slice已经定义。:)
- 确实对两者都有。 固定。
TL; DR:
1 | myslice = myslice[:len(myslice) - 1] |
顺便说一句,如果" myslice"的大小为零,这将失败。
更长的答案:
1 | myslice = myslice[:len(myslice) - 1] |
如果" myslice"的大小为零,这将失败。
切片是指向底层数组的数据结构,切片等操作使用相同的底层数组。
这意味着,如果对切片进行切片,则新切片仍将指向与原始切片相同的数据。
通过执行上述操作,最后一个元素仍将位于数组中,但您将无法再引用它。
编辑
澄清:
如果您将切片重新切片为原始长度,则可以引用最后一个对象
/编辑
如果您有一个很大的切片,并且还想修剪底层数组以节省内存,则可能要使用"复制"来创建一个具有较小底层数组的新切片,并让旧的大切片得到垃圾回收。
- @tommywild:添加了有关引用最后一个元素的说明。 我确实了解到,在"删除"该元素时,您会做什么,这是隐式的。 实际上,您也可以只使用append。 如果此更改使您满意,可以删除-1吗? 老实说,我什至不认为它应该是-1之前的样子:/
- @tommywild好的:)无论如何,您的观点是正确的,感谢您指出:)
- 不知道为什么-1或者..所以要另外投票。 您的答案实际上比我的答案更全面。
- @SimonWhitehead谢谢男人:)