假設我有以下代碼:
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]
}
}
uj5u.com熱心網友回復:
第二個版本允許執行較少的索引:您索引一次并獲得一行。可以通過僅索引“內部”切片來迭代一行。
因此,當迭代切片切片時,始終首先回圈外部切片,您將其索引一次并獲得內部切片。您可以通過僅索引內部切片來迭代它(無需始終索引外部)。
這也會導致順序記憶體訪問,這可能會導致編譯器和運行時進一步優化。
所以這樣做:
for _, row := range arr {
for _, value := range row {
// Use value
}
}
以另一種方式(當您首先增加內部切片的索引時),您總是必須使用雙索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404484.html
標籤:
