我有以下代碼,如果您愿意,請隨時提供指示:package mainimport ( "fmt")type Grid struct { rows int cols int tiles []Tile}type Tile struct { x int y int contents int}func (g Grid) AddTile(t Tile) { g.tiles = append(g.tiles, t)}func (g *Grid) Row(num int) []Tile { numTiles := len(g.tiles) row := []Tile{} for i := 0; i < numTiles; i++ { tile := g.tiles[i] if (tile.y == num) { row = append(row, tile) } } return row}/* HERE IS WHERE I NEED HELP*/func (g *Grid) SetRow(num, val int) { row := g.Row(num) rowLength := len(row) for i := 0; i < rowLength; i++ { tile := &row[i] tile.contents = val }}func (g Grid) Col(num int) []Tile { numTiles := len(g.tiles) col := []Tile{} for i := 0; i < numTiles; i++ { tile := g.tiles[i] if (tile.x == num) { col = append(col, tile) } } return col}func MakeTile(x, y int) Tile { tile := Tile{x: x, y: y} return tile}func MakeGrid(rows, cols int) Grid { g := Grid{ rows: rows, cols: cols} for r := 1; r <= rows; r++ { for c := 1; c <= cols; c++ { g.tiles = append(g.tiles, MakeTile(r, c)) } } return g}func main() { g := MakeGrid(256, 256) g.SetRow(100, 5) fmt.Println(g.Row(100))}我正在做這個,最重要的是,作為一個幫助我學習 Go 的簡單項目。遇到的問題就在這里/* HERE IS WHERE I NEED HELP*/func (g *Grid) SetRow(num, val int) { row := g.Row(num) rowLength := len(row) for i := 0; i < rowLength; i++ { tile := &row[i] tile.contents = val }}在某處似乎我需要指向我試圖修改的實際瓷磚。事實上,該SetRow函數實際上并沒有修改任何東西。我究竟做錯了什么?請記住,我 2 天前才開始學習 Go,所以這是一次學習經歷 :)
1 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
實現目標的一種方法是在整個代碼中使用指向磁貼的指針。將網格圖塊字段更改為:
tiles []*Tile
以及通過代碼進行的一些相關更改。
此外,更改所有方法以使用指針接收器。問題中編寫的 AddTile 方法在返回時丟棄對網格的修改。
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消