web-dev-qa-db-fra.com

Comment puis-je choisir au hasard dans un tableau?

Je veux savoir s’il existe une façon beaucoup plus propre de procéder. En gros, je veux choisir un élément aléatoire dans 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 at-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 vous pourriez faire myArray.shuffle.first, mais je n’ai vu que #shuffle il ya quelques minutes sous SO, je ne l’ai pas encore utilisé.

512
Paul Hoffer

Utilisez simplement Array#sample :

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

Il est disponible dans Ruby 1.9.1+. Pour pouvoir également l'utiliser avec une version antérieure de Ruby, vous pouvez 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 une version ultérieure, vous ne devriez donc pas l'utiliser.

Bien que cela ne soit pas utile dans ce cas, sample accepte un argument numérique au cas où vous souhaiteriez disposer de plusieurs échantillons distincts.

1035

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

75
beesasoh

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"]
11
Mike Rapadas
myArray.sample

retournera 1 valeur aléatoire.

myArray.shuffle.first

retournera également 1 valeur aléatoire.

10
JJ21
class String

  def black
    return "\e[30m#{self}\e[0m"
  end

  def red
    return "\e[31m#{self}\e[0m"
  end

  def light_green
    return "\e[32m#{self}\e[0m"
  end

  def purple
    return "\e[35m#{self}\e[0m"
  end

  def blue_dark
    return "\e[34m#{self}\e[0m"
  end

  def blue_light
    return "\e[36m#{self}\e[0m"
  end

  def white
    return "\e[37m#{self}\e[0m"
  end


  def randColor
    array_color = [
      "\e[30m#{self}\e[0m",
      "\e[31m#{self}\e[0m",
      "\e[32m#{self}\e[0m",
      "\e[35m#{self}\e[0m",
      "\e[34m#{self}\e[0m",
      "\e[36m#{self}\e[0m",
      "\e[37m#{self}\e[0m" ]

      return array_color[Rand(0..array_color.size)]
  end


end
puts "black".black
puts "red".red
puts "light_green".light_green
puts "purple".purple
puts "dark blue".blue_dark
puts "light blue".blue_light
puts "white".white
puts "random color".randColor
0
Charon IV
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 de array.

Si vous utiliserez la ligne mentionnée ci-dessous

arr[1+Rand(arr.count)]

puis dans certains cas, il retournera 0 ou aucune valeur.

La ligne mentionnée ci-dessous

Rand(number)

renvoie toujours la valeur de 0 à 1.

Si on utilise

1+Rand(number)

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

0
Muhammad Aamir