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

假设我有以下代码:


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]

    }

 }


UYOU
浏览 102回答 1
1回答

慕无忌1623718

第二个版本允许执行更少的索引:您索引一次并获得一行。可以通过仅索引“内部”切片来完成对一行的迭代。因此,当迭代切片切片时,总是先循环外层切片,将其索引一次,然后得到一个内层切片。您可以通过仅索引内部切片来迭代它(无需始终索引外部切片)。这也会导致顺序内存访问,这可能会导致编译器和运行时进一步优化。所以这样做:for _, row := range arr {    for _, value := range row {        // Use value    }}做另一种方式(当你首先增加内部切片的索引时),你总是必须使用双索引。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go