Après avoir lu ce qui suit à http://golang.org/doc/effective_go.html#arrays ...Traitement des tableaux dans Go
- Les tableaux sont des valeurs. L'affectation d'un tableau à un autre copie tous les éléments .
- En particulier, si vous passez un tableau à une fonction, il recevra une copie du tableau , et non un pointeur.
... Je me attends dans le code suivant que arr2
soit distincte de arr
et main()
's arr
doit être distinct de shuffle()
' s arr
. Quelqu'un peut-il s'il vous plaît expliquer pourquoi le code suivant shuffles arr2
? Je sais que Go est encore une langue jeune; le traitement des tableaux a peut-être changé?
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)
}
}
Note: votre fonction 'shuffle()' devrait utiliser 'j: = rand.Intn (i + 1)' sinon vous excluez la probabilité qu'un élément reste en place, par exemple shuffleing {1, 2} 'aboutirait toujours' {2, 1} 'et jamais dans l'autre résultat' {1, 2} 'possible. – icza