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

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

在 Go 中間接更改結構中的值

在 Go 中間接更改結構中的值

Go
搖曳的薔薇 2021-12-07 18:42:24
我有以下代碼,如果您愿意,請隨時提供指示: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 方法在返回時丟棄對網格的修改。


查看完整回答
反對 回復 2021-12-07
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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