2010-09-29 22 views
6

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

+2

Duplicate http://stackoverflow.com/questions/1816378/comment-aléatoirement-trier-embrouiller-un-tableau-dans-le-rubis – Nakilon

+1

Votre fonction hypotétique a fait tomber 2 éléments du tableau. Même "shuffle" ne peut pas faire ça, gg! – Nakilon

Répondre

9

Utilisez la méthode shuffle ...

irb(main):001:0> [1,2,3,4,5].shuffle 
=> [3, 4, 2, 5, 1] 
-2
loop n times 
    i = random array index 
    j = random array index 
    swap elements i and j 
end 
+0

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. –

+0

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

+0

@Nakilon: De quoi parlez-vous? Pourquoi est-ce important si n est pair ou impair? – RyanHennig

7

la commande shuffle retourne une version aléatoire d'un tableau

par exemple:

[1,2,3].shuffle => [2,3,1] 
+1

Fonctionne sur 1.8.7p249 –

+2

et si vous voulez randomiser en place, vous pouvez simplement écrire '@ number.shuffle!' – Peter

-1

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

+0

dude ce code est un gâchis! – horseyguy

+0

Au moins, il est le seul ici, qui a donné une solution de travail sans fonctions intégrées. – Nakilon

1
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9] 
=> [5, 7, 3, 8, 9, 4, 2, 1, 6] 
+0

bon pour 1.8.6 :) mais maintenant démodé! – horseyguy