Question Comment puis-je choisir au hasard un tableau?


Je veux savoir s'il y a une façon beaucoup plus propre de le faire. Fondamentalement, je veux choisir un élément aléatoire d'un tableau de longueur variable. Normalement, je le ferais comme ceci:

myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]

Y a-t-il quelque chose de plus lisible / plus simple pour remplacer la deuxième ligne? Ou est-ce la meilleure façon de le faire? Je suppose que tu pourrais faire myArray.shuffle.first, mais je n'ai vu que #shuffle il y a quelques minutes sur SO, je ne l'ai pas encore utilisé.


492
2017-08-14 05:26


origine


Réponses:


Juste utiliser Array#sample:

[:foo, :bar].sample # => :foo, or :bar :-)

Il est disponible dans Ruby 1.9.1+. Pour être également capable de l'utiliser avec une version antérieure de Ruby, vous pourriez require "backports/1.9.1/array/sample".

Notez que dans Ruby 1.8.7 il existe sous le nom malheureux choice; il a été renommé dans la version ultérieure, vous ne devriez donc pas l'utiliser.

Bien que pas utile dans ce cas, sample accepte un argument numérique dans le cas où vous voulez un certain nombre d'échantillons distincts.


991
2017-08-14 14:39



myArray.sample(x) peut également vous aider à obtenir x éléments aléatoires du tableau.


68
2017-07-04 12:11



Nombre aléatoire d'éléments aléatoires d'un tableau

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

Exemples de résultats possibles:

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

=> ["two", "three"]
=> ["one", "three", "two"]
=> ["two"]

10
2017-10-07 08:31



myArray.sample

renverra 1 valeur aléatoire.

myArray.shuffle.first

retournera également 1 valeur aléatoire.


9
2017-10-22 04:31



Personnellement, je préférerais la méthode item = myArray.random_element.

METTRE À JOUR: Si vous n'utilisez pas de rails (support actif), vous devrez définir vous-même la méthode. Voir La réponse de Marc-André Lafortune pour une vue plus moderne. Vous pouvez également définir la méthode d'exemple Array # comme ceci, si vous utilisez la version de ruby ​​<1.9.1.

class Array
  def random_element
    self[rand(length)]
  end
end

5
2017-08-14 05:39



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

Cela retournera un élément aléatoire du tableau.

Si vous utiliserez la ligne mentionnée ci-dessous

arr[1+rand(arr.count)]

alors dans certains cas, il retournera 0 ou une valeur nulle.

La ligne mentionnée ci-dessous

rand(number)

toujours retourner la valeur de 0 au numéro-1.

Si nous utilisons

1+rand(number)

alors il peut retourner un nombre et arr [nombre] ne contient aucun élément.


0
2018-06-29 09:57