亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我應該在 Go 中以行主要順序還是列主要順序訪問 2D 切片?

我應該在 Go 中以行主要順序還是列主要順序訪問 2D 切片?

Go
UYOU 2022-10-24 15:09:43
假設我有以下代碼: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

    }

}

做另一種方式(當你首先增加內部切片的索引時),你總是必須使用雙索引。


查看完整回答
反對 回復 2022-10-24
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號