为了账号安全,请及时绑定邮箱和手机立即绑定

如何转到切片中的下一项

如何转到切片中的下一项

Go
绝地无双 2022-08-01 10:15:09
我已经编写了以下代码来获取数组中的下一项。count:=len(value.Values)for index, currentRow := range value.Values {    var nextRow Value    if index< count{    nextRow = value.Values[index+1]    fmt.Print(nextRow)    }}我在运行上述代码时感到恐慌。Goroutine panic: 运行时错误: 索引超出范围任何关于如何从切片中获取下一项的想法。
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

下一项确实是 ,但如果是最后一个元素的索引,则没有下一项,在这种情况下是无效的索引,并且尝试使用它会导致运行时死机。value.Values[index+1]indexindex+1value.Values


所以检查索引:


for index, currentRow := range value.Values {

    var nextRow Value

    if index < timeSeriesDataCount && index < len(value.Values)-1 {

        nextRow = value.Values[index+1]

        fmt.Print(nextRow)

    }

}

另一种选择是在一个少一个切片上划一个范围(不包括最后一个元素),因此无需检查 ,肯定还有另一个元素:index


for index, currentRow := range value.Values[:len(value.Values)-1] {

    var nextRow Value

    if index < timeSeriesDataCount {

        nextRow = value.Values[index+1]

        fmt.Print(nextRow)

    }

}

在这种情况下,您必须考虑的是,如果是空的,因为如果是,则上述切片操作将再次惊慌失措,因此请检查:value.Values


if len(value.Values) > 0 {

    for index, currentRow := range value.Values[:len(value.Values)-1] {

        var nextRow Value

        if index < timeSeriesDataCount {

            nextRow = value.Values[index+1]

            fmt.Print(nextRow)

        }

    }

}

请注意,我们可以检查是否,因为即使不会有恐慌,如果,也会有迭代。len(value.Values) > 1len = 10


另请注意,在排除最后一个元素的切片上进行范围不会访问最后一个元素(显然),因此,如果您要对元素执行任何其他操作,这可能不可行,但在您的示例中,它们是等效的。


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号