假设我有以下代码: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
}
}
做另一种方式(当你首先增加内部切片的索引时),你总是必须使用双索引。
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消