为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 中创建一个三维数组

如何在 Golang 中创建一个三维数组

Go
holdtom 2021-11-22 19:28:38
我正在尝试创建一个包含块(如魔方)的三维数组。我尝试了很多东西,但我无法让它工作。func generateTiles(x int, y int, z int) [][][]*tile{  var tiles [][][]*tile  // Something here  // resulting in a x by y by z array  // filled with *tile  return tiles}有什么建议?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您必须自行初始化每个图层。示例(在玩):


tiles = make([][][]*tile, x)


for i := range tiles {

    tiles[i] = make([][]*tile, y)

    for j := range tiles[i] {

        tiles[i][j] = make([]*tile, z)

    }

}


查看完整回答
反对 回复 2021-11-22
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

出于性能原因,我个人会使用一维切片,我将其添加为替代方案:


type Tile struct {

    x, y, z int

}


type Tiles struct {

    t       []*Tile

    w, h, d int

}


func New(w, h, d int) *Tiles {

    return &Tiles{

        t: make([]*Tile, w*h*d),

        w: w,

        h: h,

        d: d,

    }

}


// indexing based on http://stackoverflow.com/a/20266350/145587

func (t *Tiles) At(x, y, z int) *Tile {

    idx := t.h*t.w*z + t.w*y

    return t.t[idx+x]

}


func (t *Tiles) Set(x, y, z int, val *Tile) {

    idx := t.h*t.w*z + t.w*y

    t.t[idx+x] = val

}


func fillTiles(w int, h int, d int) *Tiles {

    tiles := New(w, h, d)


    for x := 0; x < w; x++ {

        for y := 0; y < h; y++ {

            for z := 0; z < d; z++ {

                tiles.Set(x, y, z, &Tile{x, y, z})

            }

        }

    }


    return tiles

}


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 443 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信