IT-Swarm.Net

Πώς μπορώ να διαλέξω τυχαία από έναν πίνακα;

Θέλω να μάθω αν υπάρχει πολύ πιο καθαρός τρόπος για να γίνει αυτό. Βασικά, θέλω να διαλέξω ένα τυχαίο στοιχείο από μια σειρά μεταβλητού μήκους. Κανονικά, θα το έκανα έτσι:

myArray = ["stuff", "widget", "Ruby", "goodies", "Java", "emerald", "etc" ]
item = myArray[Rand(myarray.length)]

Υπάρχει κάτι που είναι πιο ευανάγνωστο/απλούστερο για την αντικατάσταση της δεύτερης γραμμής; Ή είναι αυτός ο καλύτερος τρόπος να το κάνετε. Υποθέτω ότι θα μπορούσατε να κάνετε myArray.shuffle.first, αλλά είδα μόνο #shuffle πριν από λίγα λεπτά για SO, δεν το έχω χρησιμοποιήσει ακόμα.

520
Paul Hoffer

Απλά χρησιμοποιήστε Array#sample :

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

Διατίθεται σε Ruby 1.9.1+. Για να μπορέσετε να το χρησιμοποιήσετε με μια προηγούμενη έκδοση του Ruby, θα μπορούσατε require "backports/1.9.1/array/sample" .

Σημειώστε ότι στο Ruby 1.8.7 υπάρχει κάτω από το ατυχές όνομα choice; μετονομάστηκε σε μεταγενέστερη έκδοση, επομένως δεν πρέπει να το χρησιμοποιήσετε.

Παρόλο που δεν είναι χρήσιμη σε αυτή την περίπτωση, το sample δέχεται ένα όρισμα αριθμού σε περίπτωση που θέλετε μια σειρά διακριτών δειγμάτων.

1052
Marc-André Lafortune

myArray.sample(x) μπορεί επίσης να σας βοηθήσει να πάρετε x τυχαία στοιχεία από τη συστοιχία.

78
beesasoh

Τυχαίος αριθμός τυχαίων στοιχείων από έναν πίνακα

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

θα επιστρέψει 1 τυχαία τιμή.

myArray.shuffle.first

θα επιστρέψει επίσης 1 τυχαία τιμή.

11
JJ21
arr = [1,9,5,2,4,9,5,8,7,9,0,8,2,7,5,8,0,2,9]
arr[Rand(arr.count)]

Αυτό θα επιστρέψει ένα τυχαίο στοιχείο από τον πίνακα.

Εάν θα χρησιμοποιήσετε τη γραμμή που αναφέρεται παρακάτω

arr[1+Rand(arr.count)]

τότε σε ορισμένες περιπτώσεις θα επιστρέψει 0 ή μηδενική τιμή.

Η γραμμή που αναφέρεται παρακάτω

Rand(number)

επιστρέψτε πάντα την τιμή από το 0 στον αριθμό-1.

Αν χρησιμοποιούμε

1+Rand(number)

τότε μπορεί να επιστρέψει τον αριθμό και το arr [αριθμός] δεν περιέχει κανένα στοιχείο.

0
Muhammad Aamir