2

Goで3次元(またはそれ以上)のスライスをどのように作成しますか?

4

2 に答える 2

5
var xs, ys, zs = 5, 6, 7 // axis sizes
var world = make([][][]int, xs) // x axis
func main() {
    for x := 0; x < xs; x++ {
        world[x] = make([][]int, ys) // y axis
        for y := 0; y < ys; y++ {
            world[x][y] = make([]int, zs) // z axis
            for z := 0; z < zs; z++ {
                world[x][y][z] = (x+1)*100 + (y+1)*10 + (z+1)*1
            }
        }
    }
}

これは、n次元スライスの作成を容易にするパターンを示しています。

于 2012-11-29T05:47:54.887 に答える
5

多次元スライスが必要ですか? コンパイル時に n 次元空間の次元がわかっている/派生可能である場合、配列を使用する方が簡単で、実行時のアクセスのパフォーマンスが向上します。例:

package main

import "fmt"

func main() {
        var world [2][3][5]int
        for i := 0; i < 2*3*5; i++ {
                x, y, z := i%2, i/2%3, i/6
                world[x][y][z] = 100*x + 10*y + z
        }
        fmt.Println(world)
}

こちらも)


出力

[[[0 1 2 3 4] [10 11 12 13 14] [20 21 22 23 24]] [[100 101 102 103 104] [110 111 112 113 114] [120 121 122 123 124]]]
于 2012-11-29T06:49:24.660 に答える