Saya ingin tahu apakah ada cara yang jauh lebih bersih untuk melakukan ini. Pada dasarnya, saya ingin memilih elemen acak dari array dengan panjang variabel. Biasanya, saya akan melakukannya seperti ini:
myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]
Apakah ada sesuatu yang lebih mudah dibaca / sederhana untuk menggantikan baris kedua? Atau apakah itu cara terbaik untuk melakukannya. Saya kira Anda bisa melakukannya myArray.shuffle.first
, tetapi saya hanya melihat #shuffle
beberapa menit yang lalu pada SO, saya belum benar-benar menggunakannya.
Jawaban:
Cukup gunakan
Array#sample
:Ini tersedia di Ruby 1.9.1+. Agar dapat menggunakannya dengan versi Ruby yang lebih lama, Anda dapat melakukannya
require "backports/1.9.1/array/sample"
.Perhatikan bahwa dalam Ruby 1.8.7 ada di bawah nama yang disayangkan
choice
; diganti namanya di versi yang lebih baru sehingga Anda tidak harus menggunakannya.Meskipun tidak berguna dalam kasus ini,
sample
menerima argumen nomor jika Anda ingin sejumlah sampel berbeda.sumber
myArray.sample(x)
juga dapat membantu Anda mendapatkan x elemen acak dari array.sumber
akan mengembalikan 1 nilai acak.
juga akan mengembalikan 1 nilai acak.
sumber
Jumlah Acak Item Acak dari Array
Contoh hasil yang mungkin:
sumber
1 +
di tempat yang berbeda.Ini akan mengembalikan elemen acak dari array.
Jika Anda akan menggunakan baris yang disebutkan di bawah ini
maka dalam beberapa kasus akan mengembalikan nilai 0 atau nil.
Garis yang disebutkan di bawah ini
selalu mengembalikan nilai dari 0 ke angka-1.
Jika kita gunakan
maka ia dapat mengembalikan angka dan arr [angka] tidak mengandung elemen.
sumber
sumber