numeros - procedimientos en ruby
¿Cómo ordenar aleatoriamente(codificar) una matriz en Ruby? (5)
¡La biblioteca de extensiones de Ruby Facets tiene un módulo Random
que proporciona métodos útiles que incluyen el orden shuffle
y la shuffle!
a un grupo de clases principales que incluyen Array
, Hash
y String
.
Solo ten cuidado si estás usando Rails ya que experimenté algunos desagradables enfrentamientos en la forma en que su monopatching chocó con Rails ...
Me gustaría tener mis elementos de la matriz codificados. 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
Código de la gema Backports para solo la matriz para Ruby 1.8.6. Ruby 1.8.7 o superior está integrado.
class Array
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
def shuffle
dup.shuffle!
end unless method_defined? :shuffle
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
def shuffle!
size.times do |i|
r = i + Kernel.rand(size - i)
self[i], self[r] = self[r], self[i]
end
self
end unless method_defined? :shuffle!
end
Construido ahora:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
Para ruby 1.8.6 (que no tiene shuffle incorporado):
array.sort_by { rand }
Para ruby 1.8.6 como el ejemplo de sepp2k, pero aún desea usar el método "shuffle".
class Array
def shuffle
sort_by { rand }
end
end
[1,2,3,4].shuffle #=> [2,4,3,1]
[1,2,3,4].shuffle #=> [4,2,1,3]
aclamaciones