第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 go 中遍歷 2D 切片

在 go 中遍歷 2D 切片

Go
冉冉說 2022-01-17 16:14:05
我正在參加“Tour of Go”,并且對練習(xí):切片示例有疑問。目前我可以通過使用 [] 運算符迭代每個索引來創(chuàng)建圖片,就像在 C 中一樣。func Pic(dx, dy int) [][]uint8 {    pic := make([][]uint8, dy)    for i := range pic {        pic[i] = make([]uint8, dx)        for j := range pic[i] {            pic[i][j] = uint8(1)        }    }    return pic} 但是,當(dāng)我嘗試執(zhí)行以下操作時,出現(xiàn)panic: runtime error: index out of range錯誤。我嘗試添加打印語句和調(diào)用Pic(3, 3),它打印出一個 3x3 數(shù)組就好了。func Pic(dx, dy int) [][]uint8 {    pic := make([][]uint8, dy)    for _, y := range pic {        y = make([]uint8, dx)        for _, x := range y {            x = uint8(1)            _ = x // x has to be used            //fmt.Print("1")        }        //fmt.Print("\n")    }    return pic}關(guān)于我做錯了什么有什么想法嗎?
查看完整描述

2 回答

?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊

主要問題是您嘗試分配。使用您的代碼檢查我的示例;https://play.golang.org/p/lwoe79jQ70

您實際上從后一種實現(xiàn)中得到的是一個 3x0 數(shù)組,所有內(nèi)部數(shù)組都是空的。這樣做的原因是因為您正在使用范圍變量進(jìn)行分配,這是行不通的。如果當(dāng)前索引是0y != pic[0],pic[0]分配給y但是,y是臨時存儲,它通常是相同的地址并且在每次迭代時被覆蓋。所以在后一個例子執(zhí)行之后,你所有的 x 方向數(shù)組都是空的,索引到一個會導(dǎo)致恐慌。

基本上你應(yīng)該只使用你的第一個實現(xiàn),因為它工作正常并且是你通常會這樣做的方式。但是要點是,當(dāng)您這樣做時a, b := range Something b != Something[a],它是在實例上,它超出了循環(huán)底部的范圍,并且分配給它不會導(dǎo)致集合的狀態(tài)更改,相反,如果您愿意,Something您必須分配給Something[a]修改Something[a].


查看完整回答
反對 回復(fù) 2022-01-17
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊

range 從您正在迭代的切片中復(fù)制值。

見: http: //golang.org/ref/spec#RangeClause


要澄清發(fā)生了什么,請參見這個簡單的代碼示例及其輸出:


package main


import "fmt"


func main() {

    s := "hi"

    //s[0] = 'H' // cannot assign to s[0]

    for _, v := range s {

        fmt.Printf("%T, %[1]v, %X\n", v, &v)

        v = 'H' // has no effect: this is local var not ref

    }

    fmt.Println(s)

}

輸出為:

int32, 104, C0820042D4

int32, 105, C0820042D4

hi

如您所見,變量 v 的地址沒有改變(C0820042D4),v 是局部變量,范圍將值復(fù)制到其中,因此更改 v 無效。這里 v 是 rune(int32 別名),rune 是一個標(biāo)識 Unicode 代碼點的整數(shù)值,你不能分配給 s[0] 并且這不會編譯: s[0] = 'H'

所以 v = 'H ' 對 s 沒有影響,它只是局部變量。


查看完整回答
反對 回復(fù) 2022-01-17
  • 2 回答
  • 0 關(guān)注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號