657 Stimmen

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

Ich möchte wissen, ob es einen saubereren Weg gibt, dies zu tun. Im Grunde möchte ich ein zufälliges Element aus einem Array mit variabler Länge auswählen. Normalerweise würde ich es wie folgt tun:

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

Gibt es etwas, das die zweite Zeile besser lesbar/einfacher ersetzt? Oder ist das der beste Weg, es zu tun. Ich nehme an, Sie könnten Folgendes tun myArray.shuffle.first , aber ich sah nur #shuffle vor ein paar Minuten auf SO, ich habe es noch nicht wirklich benutzt.

1286voto

Marc-André Lafortune Punkte 75645

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 ; er wurde in späteren Versionen umbenannt, so dass Sie ihn nicht mehr verwenden sollten.

Auch wenn dies in diesem Fall nicht sinnvoll ist, sample akzeptiert ein Zahlenargument für den Fall, dass Sie eine bestimmte Anzahl von Proben wünschen.

104voto

beesasoh Punkte 1975

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

24voto

JJ21 Punkte 251
myArray.sample

wird 1 Zufallswert zurückgegeben.

myArray.shuffle.first

wird ebenfalls 1 Zufallswert zurückgegeben.

17voto

Mike Rapadas Punkte 4503

Zufällige Anzahl von zufälligen Elementen 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"]

1voto

Muhammad Aamir Punkte 78
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 array zurück.

Wenn Sie die nachstehende Zeile verwenden möchten

arr[1+rand(arr.count)]

dann wird in einigen Fällen 0 oder Null zurückgegeben.

Die unten stehende Zeile

rand(number)

gibt immer den Wert von 0 bis Zahl-1 zurück.

Wenn wir die

1+rand(number)

dann kann es Zahl zurückgeben und arr[Zahl] enthält kein Element.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X