Quero saber se existe uma maneira muito mais limpa de fazer isso. Basicamente, quero escolher um elemento aleatório de uma matriz de comprimento variável. Normalmente, eu faria assim:
myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]
Existe algo mais legível / mais simples para substituir a segunda linha? Ou essa é a melhor maneira de fazê-lo. Suponho que você poderia myArray.shuffle.first
, mas vi apenas #shuffle
alguns minutos atrás no SO, ainda não o usei.
Respostas:
Basta usar
Array#sample
:Está disponível no Ruby 1.9.1+. Para poder usá-lo também com uma versão anterior do Ruby, você poderia
require "backports/1.9.1/array/sample"
.Observe que no Ruby 1.8.7 ele existe sob o nome infeliz
choice
; foi renomeado na versão posterior, portanto você não deve usá-lo.Embora não seja útil nesse caso,
sample
aceita um argumento numérico caso você queira um número de amostras distintas.fonte
myArray.sample(x)
também pode ajudá-lo a obter x elementos aleatórios da matriz.fonte
retornará 1 valor aleatório.
também retornará 1 valor aleatório.
fonte
Número aleatório de itens aleatórios de uma matriz
Exemplos de resultados possíveis:
fonte
1 +
em um lugar diferente.Isso retornará um elemento aleatório da matriz.
Se você usar a linha mencionada abaixo
em alguns casos, ele retornará 0 ou valor nulo.
A linha mencionada abaixo
sempre retorne o valor de 0 ao número 1.
Se usarmos
então ele pode retornar number e arr [number] não contém nenhum elemento.
fonte
fonte