2011-01-18 13 views
29
func identityMat4() [16]float { 
    return { 
     1, 0, 0, 0, 
     0, 1, 0, 0, 
     0, 0, 1, 0, 
     0, 0, 0, 1 } 
} 

Espero que entiendas la idea de lo que estoy intentando hacer a través del ejemplo. ¿Cómo hago esto es ir?Inicialización de la matriz de Go

+0

Por qué es su matriz de una matriz unidimensional? Go es compatible con matrices/divisiones multidimensionales: ¿estas no se adaptarían mejor al problema? (http://golang.org/ref/spec#Array_types) –

Respuesta

32
func identityMat4() [16]float64 { 
    return [...]float64{ 
     1, 0, 0, 0, 
     0, 1, 0, 0, 
     0, 0, 1, 0, 
     0, 0, 0, 1 } 
} 

(Click to play)

+0

No está devolviendo una matriz de identidad. – peterSO

+0

^arreglado para legibilidad y precisión –

+0

también puede escribir ** devolver [16] float64 ** –

3

Si estuviera escribiendo su programa usando expresiones idiomáticas Go, que sería el uso de las rebanadas. Por ejemplo,

package main 

import "fmt" 

func Identity(n int) []float { 
    m := make([]float, n*n) 
    for i := 0; i < n; i++ { 
     for j := 0; j < n; j++ { 
      if i == j { 
       m[i*n+j] = 1.0 
      } 
     } 
    } 
    return m 
} 

func main() { 
    fmt.Println(Identity(4)) 
} 

Output: [1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1] 
+4

Ver http://blog.golang.org/2011/01/go-slices-usage-and-internals.html para la diferencia entre arrays y rebanadas. –

+3

El blog oficial de Go ahora señala específicamente matrices de transformación como uno de los pocos casos de uso buenos para usar matrices directamente: "Las matrices tienen su lugar, son una buena representación de una matriz de transformación, por ejemplo, pero su propósito más común en Go es para mantener el almacenamiento de una porción ". – tbone

12
s := []int{5, 2, 6, 3, 1, 4} // unsorted 
sort.Ints(s) 
fmt.Println(s) 
+12

¿Cómo se relaciona eso? – OneOfOne

0

cómo utilizar un inicializador de matriz para inicializar un bloque de tabla de prueba:

tables := []struct { 
    input []string 
    result string 
} { 
    {[]string{"one ", " two", " three "}, "onetwothree"}, 
    {[]string{" three", "four ", " five "}, "threefourfive"}, 
} 

for _, table := range tables { 
    result := StrTrimConcat(table.input...) 

    if result != table.result { 
     t.Errorf("Result was incorrect. Expected: %v. Got: %v. Input: %v.", table.result, result, table.input) 
    } 
} 
Cuestiones relacionadas