Me gustaría mezclar mis elementos de la matriz. Algo como esto:
[1,2,3,4].scramble => [2,1,3,4]
[1,2,3,4].scramble => [3,1,2,4]
[1,2,3,4].scramble => [4,2,3,1]
y así sucesivamente, al azar
Construido ahora:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
!
después de la llamada para barajar. Sin el,!
la matriz aleatoria se devuelve, y madura para una asignación.Para ruby 1.8.6 (que no tiene shuffle incorporado):
fuente
sort_by
función de ruby no funciona como la función de clasificación de javascript (o la función de clasificación de ruby para el caso), que solo le importa si el número calculado es menor que cero, cero o mayor que cero. En su lugar,sort_by
recuerda el valor calculado para cada elemento y luego ordena los elementos por ese valor. En este caso, a cada elemento se le asigna un número aleatorio y luego la matriz se ordena por esos números aleatorios.Para ruby 1.8.6 como ejemplo de sepp2k, pero aún desea utilizar el método "shuffle".
salud
fuente
Código de Backports Gem solo para Array for Ruby 1.8.6. Ruby 1.8.7 o superior está integrado.
fuente
La biblioteca de extensiones Ruby Facets tiene un
Random
módulo que proporciona métodos útiles que incluyenshuffle
yshuffle!
para un grupo de clases principales que incluyenArray
,Hash
yString
.Solo tenga cuidado si está usando Rails, ya que experimenté algunos desagradables enfrentamientos en la forma en que su parche chocó con el de Rails ...
fuente