2012-11-19 79 views
9

是否可以在多維數組上使用範圍和len?Go:多維數組的範圍和len?

要麼使用var [3] INT8或

package main 

func main() {  
     var a [3][5]int8 

     for h := range a { 
       println(h) 
     } 
     println(len(a)) 
} 

兩者產生 0 1 2 3

感謝dystroy的回答,下面是一個編寫和閱讀我能夠適應的3維數組的示例(發佈在這裏,因爲我很難找到任何這樣的例子,所以也許這會幫助其他人):

package main 
func main() { 
    var a [3][5][7]uint8 

    //write values to array 
    for x, b := range a { 
     for y, c := range b { 
      for z, _ := range c { 
        a[x][y][z] = uint8(x*100+y*10+z) 
       } 
     } 
    } 

    //read values from array 
    for _, h := range a { 
     for _, i := range h { 
      for _, j := range i { 
       print(j, "\t") 
      } 
      println() 
     } 
     println() 
    } 

} 

回答

7

在Go中,和大多數語言一樣,你稱之爲多維數組是數組的數組。 len運算符只給你「外部」數組的長度。

也許如果你把它看成

var a [3]([5]int8) 

也編譯VAR聲明可以爲你清晰。它是一個大小爲3的數組,其元素是int8的大小爲5的數組。

package main 
import "fmt" 
func main() { 
    var a [3][5]int8 
    for _, h := range a { 
     fmt.Println(len(h)) // each one prints 5 
    } 
    fmt.Println(len(a)) // prints 3, the length of the external array 
} 

輸出

5 
5 
5 
3 

要循環平安度過整個矩陣,你可以這樣做:

for _, h := range a { 
    for _, cell := range h { 
     fmt.Print(cell, " ") 
    } 
    fmt.Println() 
} 

如果您需要更改的內容,你可以做

for i, cell := range h { // i is the index, cell the value 
     h[i] = 2 * cell 
    } 
+0

如果/當數組大小不知道/記憶時,什麼是循環多維數組內容的好方法?基於'len(a)'和'_,var:= range a'的2個循環?對'_,_,var:= range a'使用範圍縮放3(或更多)維數組的方式嗎? – kilves76

+0

我用解決方案編輯循環:你需要兩個循環。 –

+0

謝謝你的例子,我找不到任何地方。 – kilves76