Ich möchte wissen, ob dies auf viel sauberere Weise möglich ist. Grundsätzlich möchte ich ein zufälliges Element aus einem Array variabler Länge auswählen. Normalerweise würde ich es so machen:
myArray = ["stuff", "widget", "Ruby", "goodies", "Java", "emerald", "etc" ]
item = myArray[Rand(myarray.length)]
Gibt es etwas, das besser lesbar ist, um die zweite Zeile zu ersetzen? Oder ist das der beste Weg, um es zu tun. Ich vermute, Sie könnten myArray.shuffle.first
tun, aber ich habe #shuffle
vor wenigen Minuten auf SO gesehen, ich habe es noch nicht benutzt.
Verwenden Sie einfach Array#sample
:
[:foo, :bar].sample # => :foo, or :bar :-)
Es ist in Ruby 1.9.1+ verfügbar. Um es auch mit einer früheren Version von Ruby verwenden zu können, können Sie require "backports/1.9.1/array/sample"
.
Beachten Sie, dass es in Ruby 1.8.7 unter dem unglücklichen Namen choice
existiert. Es wurde in einer späteren Version umbenannt, daher sollten Sie das nicht verwenden.
Obwohl dies in diesem Fall nicht sinnvoll ist, akzeptiert sample
ein Argument für die Zahl, falls Sie mehrere unterschiedliche Samples wünschen.
myArray.sample(x)
kann Ihnen auch dabei helfen, x zufällige Elemente aus dem Array zu erhalten.
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
gibt 1 zufälligen Wert zurück.
myArray.shuffle.first
gibt auch einen zufälligen Wert zurück.
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)]
Dies gibt ein zufälliges Element aus dem Array zurück.
Wenn Sie die unten angegebene Zeile verwenden
arr[1+Rand(arr.count)]
in einigen Fällen wird der Wert 0 oder Null zurückgegeben.
Die unten erwähnte Zeile
Rand(number)
gib immer den Wert von 0 bis Nummer-1 zurück.
Wenn wir verwenden
1+Rand(number)
dann kann die Nummer zurückgegeben werden und arr [number] enthält kein Element.