¿Cómo elijo aleatoriamente de una matriz?

Resuelto Paul Hoffer asked hace 14 años • 7 respuestas

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 #shufflehace unos minutos en SO, en realidad aún no lo he usado.

Paul Hoffer avatar Aug 14 '10 12:08 Paul Hoffer
Aceptado

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, sampleacepta un argumento numérico en caso de que desee varias muestras distintas.

Marc-André Lafortune avatar Aug 14 '2010 14:08 Marc-André Lafortune

myArray.sample(x)También puede ayudarle a obtener x elementos aleatorios de la matriz.

beesasoh avatar Jul 04 '2013 12:07 beesasoh
myArray.sample

devolverá 1 valor aleatorio.

myArray.shuffle.first

también devolverá 1 valor aleatorio.

JJ21 avatar Oct 22 '2013 04:10 JJ21