假設(shè)我有以下代碼:arr := make([][]byte, 10000)for i := range arr { arr[i] = make([]byte, 10000)}像這樣遍歷數(shù)組會(huì)更快嗎?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貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
第二個(gè)版本允許執(zhí)行更少的索引:您索引一次并獲得一行。可以通過僅索引“內(nèi)部”切片來完成對(duì)一行的迭代。
因此,當(dāng)?shù)衅衅瑫r(shí),總是先循環(huán)外層切片,將其索引一次,然后得到一個(gè)內(nèi)層切片。您可以通過僅索引內(nèi)部切片來迭代它(無需始終索引外部切片)。
這也會(huì)導(dǎo)致順序內(nèi)存訪問,這可能會(huì)導(dǎo)致編譯器和運(yùn)行時(shí)進(jìn)一步優(yōu)化。
所以這樣做:
for _, row := range arr {
for _, value := range row {
// Use value
}
}
做另一種方式(當(dāng)你首先增加內(nèi)部切片的索引時(shí)),你總是必須使用雙索引。
- 1 回答
- 0 關(guān)注
- 94 瀏覽
添加回答
舉報(bào)
0/150
提交
取消