2010-09-29 11 views
6

que tienen una serie @number = [1,2,3,4,5,6,7,8,9]
Ahora, quiero cambiar aleatoriamente el contenido gama ... algo como por ejemplo: [5,3,2,6,7,1,8]
favor me guía de cómo proceder con ella.asignaron al azar a elementos de la matriz

+2

Duplicar http://stackoverflow.com/questions/1816378/how-to-randomly-sort-scramble-an-array-en-ruby – Nakilon

+1

Su función hipotética dejó caer 2 elementos de la matriz. Incluso 'shuffle' no puede hacer eso, ¡gg! – Nakilon

Respuesta

9

Utilice el método 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

No se garantiza que Random proporcione resultados correctamente distribuidos. Por lo tanto, al intercambiar elementos con dos índices aleatorios, puede obtener una matriz con bloques de secuencias sin cambios en el medio. Debe aumentar i de 0 a ny tomar la opción aleatoria j para asegurarse de que * todos los elementos * se intercambien al menos una vez. –

+0

horrible. Incluso e impar 'n' da dos conjuntos diferentes de permutaciones. Es muy triste, pero aún así algunos maestros enseñan a los estudiantes sobre este método ... ¡Nunca hagas eso! – Nakilon

+0

@Nakilon: ¿De qué estás hablando? ¿Por qué es importante si n es par o impar? – RyanHennig

7

el comando devuelve una versión shuffle aleatorizado de una matriz

por ejemplo:

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

Funciona en 1.8.7p249 –

+2

y si desea aleatorizar en su lugar, puede simplemente escribir '@ number.shuffle!' – Peter

-1

Si está utilizando la versión antigua de ruby ​​... esto funcionará

def randomize(array) 
b = [] 
array.length.downto(1) { |n| 
    b.push array.delete_at(rand(n)) 
} 
b 

extremo

a = [1,2,3,4,5] b = randomize (a) impresión b

+0

amigo este código es un desastre! – horseyguy

+0

Al menos, él es el único aquí, que dio una solución de trabajo sin funciones incorporadas. – 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

bueno para 1.8.6 :) pero ahora desactualizado! – horseyguy

Cuestiones relacionadas