2012-11-29 2 views

답변

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 차원 슬라이스를 만들기 쉽게하는 패턴을 보여줍니다.

+0

위시 우리가'말 세계 수 = 만들기 ([11100] [11100] [11100] INT)' where 11 = len, 100 = cap 그리고 이것을 world [x] [y] [z]로 직접 참조하십시오 ... – kilves76

5

다차원 슬라이스이 필요합니까? 컴파일 시간에 n 차원 공간의 크기를 알 수 있거나 파생 가능한 경우 배열을 사용하면 런타임 액세스가 더 쉽고 빠릅니다. 예 : (또한 here)

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]]] 
+0

그건 흥미로운 루프 처리 방법입니다. 수학은 무엇을 기반으로합니까? 나는 그것을 해결할 수 없다. – kilves76

+0

내 재빠른 직감은 i % 2, i % 3, i % 5에 대한 것이었을 것입니다. – kilves76

+1

x = (i/(1)) % 2, y = (i/(1.2)) % 3, z = (i/(1.2.3)) % 5와 같이 "Unimplified" HTH ;-) – zzzz