Después de leer lo siguiente en http://golang.org/doc/effective_go.html#arrays ...Tratamiento de matrices en Ir
- Las matrices son valores. Al asignar una matriz a otra, se copian todos los elementos .
- En particular, si se pasa una matriz a una función, que recibirán una copia de la matriz, no un puntero a ella.
... espero en el código siguiente al arr2
a ser distinto de arr
y main()
's arr
a ser distinto de shuffle()
' s arr
. ¿Puede alguien explicar por qué el siguiente código se mezcla al arr2
? Sé que Go sigue siendo un lenguaje joven; tal vez el tratamiento de las matrices ha cambiado?
package main
import (
"fmt"
"rand"
"time"
)
func shuffle(arr []int) {
rand.Seed(time.Nanoseconds())
for i := len(arr) - 1; i > 0; i-- {
j := rand.Intn(i)
arr[i], arr[j] = arr[j], arr[i]
}
}
func main() {
arr := []int{1, 2, 3, 4, 5}
arr2 := arr
shuffle(arr)
for _, i := range arr2 {
fmt.Printf("%d ", i)
}
}
Nota: el 'shuffle()' función debe utilizar 'j: = rand.Intn (i + 1)' demás se excluye la probabilidad de que un elemento de permanecer en el lugar, así por ejemplo shuffleing '{1, 2} 'siempre daría como resultado' {2, 1} 'y nunca en el otro resultado posible' {1, 2} '. – icza