¿Cómo elijo aleatoriamente de una matriz?
Quiero saber si existe una forma mucho más limpia de hacer esto. Básicamente, quiero elegir un elemento aleatorio de una matriz de longitud variable. Normalmente lo haría así:
myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]
¿Hay algo que sea más legible/más sencillo para reemplazar la segunda línea? ¿O es esa la mejor manera de hacerlo? Supongo que podrías hacerlo myArray.shuffle.first
, pero solo lo vi #shuffle
hace unos minutos en SO, en realidad aún no lo he usado.
Solo usa Array#sample
:
[:foo, :bar].sample # => :foo, or :bar :-)
Está disponible en Ruby 1.9.1+. Para poder usarlo también con una versión anterior de Ruby, podrías hacerlo require "backports/1.9.1/array/sample"
.
Tenga en cuenta que en Ruby 1.8.7 existe con el desafortunado nombre choice
; se le cambió el nombre en una versión posterior, por lo que no deberías usarlo.
Aunque no es útil en este caso, sample
acepta un argumento numérico en caso de que desee varias muestras distintas.
myArray.sample(x)
También puede ayudarle a obtener x elementos aleatorios de la matriz.
myArray.sample
devolverá 1 valor aleatorio.
myArray.shuffle.first
también devolverá 1 valor aleatorio.