slice 切片删除 panic: runtime error: slice bounds out of range
来源:互联网 发布:爱淘宝 编辑:程序博客网 时间:2024/06/11 10:57
需要删除切片中指定的元素,百度了一下,很多人介绍的方法如下:
import ( "fmt" "math/rand")func test_slice() { vect := make([]int, 10) //1. 赋初值 for i, _ := range vect { vect[i] = i } for i := 0; i < 3; i++ { k := rand.Intn(10) vect[k] = -1 //将其中三个值设为-1 } //vect[9] = -1 //***注:将最后一个元素置为-1 fmt.Println("before:", vect) //2.遍历切片,并删除值为-1的元素 for _, v := range vect { if v == -1 { vect = append(vect[:i], vect[i+1:]...) } } fmt.Println("after:", vect)}
结果:如果没有vect[9] = -1
,这段程序是OK的(假设随机生成的-1恰好不是最后一个),但加上这句话,编译时就会报错:panic: runtime error: slice bounds out of range
还不知道什么原因?有人说是循环中删除自身导致长度变化引起越界,但为什么最后一个元素不是要删除的就没有问题呢?希望知道的同学能分享一下,谢谢啦!
最后的解决方案是新定义了一个slice
func test_slice() { vect := make([]int, 10) for i, _ := range vect { vect[i] = i } for i := 0; i < 3; i++ { k := rand.Intn(10) vect[k] = -1 } vect[9] = -1 fmt.Println("before:", vect) var vt = make([]int, 0) for _, v := range vect { if v != -1 { vt = append(vt, v) } } vect = vt fmt.Println("after:", vect, vt)}
阅读全文
0 0
- slice 切片删除 panic: runtime error: slice bounds out of range
- goLang panic: runtime error: slice bounds out of range
- golang slice index out of range错误
- 切片(Slice)
- 切片 slice
- 切片slice
- golang ---- slice 切片
- Golang slice 切片
- python 切片(slice)
- Go 语言切片(Slice)
- Python 切片(slice)
- golang slice 切片原理
- Slice切片操作
- Go语言切片(Slice)
- Go语言 --- slice切片
- Python 切片(Slice)
- 切片(slice)
- Range or index out of bounds
- 二进制文件操作-存储与读取
- TestNg安装与使用
- CC2640之添加一个自定义的特性值
- 使用Spring中配置的数据库,来再创建一个数据库
- jq操作radio、checkbox
- slice 切片删除 panic: runtime error: slice bounds out of range
- Spring boot画面传値给controller
- 服务器隐藏IP之阿里云盾篇
- 第2章 Django 速成:构建一个Blog:
- HDU3062
- K个最近的点
- pip-pop源码分析
- 机器学习的归宿《终极算法》·一
- sql,用COALESCE,NULLIF对空值和null值进行处理