2012-11-19 14 views
9

Ist es möglich, Bereich und Len auf einem multidimensionalen Array zu verwenden?Go: Bereich und Len eines mehrdimensionalen Arrays?

Entweder mit var a [3] int8 oder

package main 

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

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

Beide produzieren 0 1 2 3 ?

Dank dystoys Antwort, hier ist ein Beispiel für das Schreiben und Lesen eines 3-dimensionalen Arrays, das ich anpassen konnte (hier posten, weil ich Probleme hatte, Beispiele dafür zu finden, vielleicht hilft das jemand anderem):

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() 
    } 

} 

Antwort

7

In Go wie in den meisten Sprachen, was Sie ein mehrdimensionales Array nennen, ist ein Array von Arrays. Der Operator len gibt Ihnen nur die Länge des "externen" Arrays.

Vielleicht könnte die var Erklärung klarer für Sie, wenn Sie es als

var a [3]([5]int8) 

sehen, die auch kompiliert. Es ist ein Array der Größe 3, dessen Elemente Arrays der Größe 5 von int8 sind.

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 
} 

Ausgänge

5 
5 
5 
3 

Um Schleife sicher durch die gesamte Matrix, können Sie dies tun:

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

Wenn Sie den Inhalt ändern müssen, können Sie tun

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

Was ist eine nette Möglichkeit, den Inhalt eines multidimensionalen Arrays zu durchlaufen, wenn/wenn die Größe des Arrays nicht bekannt ist/nicht bekannt ist? 2 Loops basierend auf 'len (a)' und '_, var: = range a'? Ist die Art und Weise, in der die Entfernungsskala für 3 (oder mehr) dimensionale Arrays verwendet wird, wie in '_, _, var: = Bereich a '? – kilves76

+0

habe ich mit der loop-Lösung bearbeitet: Du brauchst zwei Loops. –

+0

Danke für das Beispiel, ich konnte nirgends finden. – kilves76

Verwandte Themen