假設我有以下代碼: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 關注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消