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é.
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.
myArray.sample(x)
peut également vous aider à obtenir x éléments aléatoires du tableau.
def random_items(array)
array.sample(1 + Rand(array.count))
end
my_array = ["one", "two", "three"]
my_array.sample(1 + Rand(my_array.count))
=> ["two", "three"]
=> ["one", "three", "two"]
=> ["two"]
myArray.sample
retournera 1 valeur aléatoire.
myArray.shuffle.first
retournera également 1 valeur aléatoire.
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
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.