wake-up-neo.com

Wie wähle ich zufällig aus einem Array?

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.

512
Paul Hoffer

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.

1035

myArray.sample(x) kann Ihnen auch dabei helfen, x zufällige Elemente aus dem Array zu erhalten.

75
beesasoh

Zufällige Anzahl zufälliger Elemente aus einem Array

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

Beispiele für mögliche Ergebnisse:

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

=> ["two", "three"]
=> ["one", "three", "two"]
=> ["two"]
11
Mike Rapadas
myArray.sample

gibt 1 zufälligen Wert zurück.

myArray.shuffle.first

gibt auch einen zufälligen Wert zurück.

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)]

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.

0
Muhammad Aamir