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

我应该在 Go 中以行主要顺序还是列主要顺序访问 2D 切片?

我应该在 Go 中以行主要顺序还是列主要顺序访问 2D 切片?

Go
UYOU 2022-10-24 15:09:43
假设我有以下代码:arr := make([][]byte, 10000)for i := range arr {    arr[i] = make([]byte, 10000)}像这样遍历数组会更快吗?for row := len(arr) {    for col := len(arr[0]) {        // access arr[col][row]    } }还是像这样?for col:= len(arr[0]) {    for row := len(arr) {        // access arr[col][row]    } }
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

第二个版本允许执行更少的索引:您索引一次并获得一行。可以通过仅索引“内部”切片来完成对一行的迭代。


因此,当迭代切片切片时,总是先循环外层切片,将其索引一次,然后得到一个内层切片。您可以通过仅索引内部切片来迭代它(无需始终索引外部切片)。


这也会导致顺序内存访问,这可能会导致编译器和运行时进一步优化。


所以这样做:


for _, row := range arr {

    for _, value := range row {

        // Use value

    }

}

做另一种方式(当你首先增加内部切片的索引时),你总是必须使用双索引。


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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