tamaño len array ruby arrays random

ruby - len - ¿Cómo selecciono al azar de una matriz?



ruby slice (5)

Número aleatorio de elementos aleatorios de una matriz

def random_items(array) array.sample(1 + rand(array.count)) end

Ejemplos de posibles resultados:

my_array = ["one", "two", "three"] my_array.sample(1 + rand(my_array.count)) => ["two", "three"] => ["one", "three", "two"] => ["two"]

Quiero saber si hay 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 fácil de leer / reemplazar la segunda línea? O es esa la mejor manera de hacerlo. Supongo que podrías hacer myArray.shuffle.first , pero solo vi #shuffle hace unos minutos en SO, 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 require "backports/1.9.1/array/sample" .

Tenga en cuenta que en Ruby 1.8.7 existe bajo la desafortunada choice nombre; fue renombrado en una versión posterior, por lo que no debería usar eso.

Aunque no es útil en este caso, la sample acepta un argumento numérico en caso de que desee una serie de muestras distintas.


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


arr = [1,9,5,2,4,9,5,8,7,9,0,8,2,7,5,8,0,2,9] arr[rand(arr.count)]

Esto devolverá un elemento aleatorio de la matriz.

Si va a utilizar la línea mencionada a continuación.

arr[1+rand(arr.count)]

entonces en algunos casos devolverá 0 o valor nulo.

La línea mencionada abajo.

rand(number)

siempre devuelve el valor de 0 al número-1.

Si usamos

1+rand(number)

entonces puede devolver el número y arr [número] no contiene ningún elemento.


myArray.sample

devolverá 1 valor aleatorio.

myArray.shuffle.first

También devolverá 1 valor aleatorio.