Je randomisation ont un tableau @number = [1,2,3,4,5,6,7,8,9]
Maintenant, je veux le contenu de randomiser tableau ... quelque chose comme par exemple: [5,3,2,6,7,1,8]
S'il vous plaît me guider comment procéder.éléments du tableau
Répondre
Utilisez la méthode shuffle
...
irb(main):001:0> [1,2,3,4,5].shuffle
=> [3, 4, 2, 5, 1]
loop n times
i = random array index
j = random array index
swap elements i and j
end
Random n'est pas garanti pour donner des résultats correctement distribués. Par conséquent, échanger des éléments avec deux index aléatoires peut vous donner un tableau avec des blocs de séquences inchangées au milieu. Vous devez incrémenter i de 0 à n et prendre au hasard j pour s'assurer que tous les éléments sont échangés au moins une fois. –
Horrible. Even et impair 'n' donne deux ensembles différents de permutations. C'est tellement triste, mais certains professeurs enseignent aux étudiants cette méthode ... Ne fais jamais ça! – Nakilon
@Nakilon: De quoi parlez-vous? Pourquoi est-ce important si n est pair ou impair? – RyanHennig
la commande shuffle
retourne une version aléatoire d'un tableau
par exemple:
[1,2,3].shuffle => [2,3,1]
Fonctionne sur 1.8.7p249 –
et si vous voulez randomiser en place, vous pouvez simplement écrire '@ number.shuffle!' – Peter
Si vous utilisez ancienne version de ruby ... cela fonctionnera
def randomize(array)
b = []
array.length.downto(1) { |n|
b.push array.delete_at(rand(n))
}
b
fin
a = [1,2,3,4,5] b = randomize (a) impression b
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9]
=> [5, 7, 3, 8, 9, 4, 2, 1, 6]
bon pour 1.8.6 :) mais maintenant démodé! – horseyguy
Duplicate http://stackoverflow.com/questions/1816378/comment-aléatoirement-trier-embrouiller-un-tableau-dans-le-rubis – Nakilon
Votre fonction hypotétique a fait tomber 2 éléments du tableau. Même "shuffle" ne peut pas faire ça, gg! – Nakilon