Örneğin, 3 ile 10 arasında rastgele bir sayı oluşturmak için şunu kullanıyorum: rand(8) + 3
Bunu yapmanın daha güzel bir yolu var mı rand(3, 10)?
y - x + 1bu arada.
rand(3..10)
Örneğin, 3 ile 10 arasında rastgele bir sayı oluşturmak için şunu kullanıyorum: rand(8) + 3
Bunu yapmanın daha güzel bir yolu var mı rand(3, 10)?
y - x + 1bu arada.
rand(3..10)
Yanıtlar:
GÜNCELLEME: Ruby 1.9.3 Kernel#randaralıkları da kabul eder
rand(a..b)
http://www.rubyinside.com/ruby-1-9-3-introduction-and-changes-5428.html
Diziye dönüştürmek çok pahalı olabilir ve gereksizdir.
(a..b).to_a.sample
Veya
[*a..b].sample
Ruby 1.8.7+ sürümünde standarttır.
Not: 1.8.7'de #choice olarak adlandırılmış ve sonraki sürümlerde yeniden adlandırılmıştır.
Ama yine de, dizi oluşturmak kaynaklara ihtiyaç duyuyor ve zaten yazdığınız çözüm yapabileceğiniz en iyisi.
Random.new.rand(a..b)
aEn düşük değeriniz ve ben yüksek değeriniz nerede .
rand()aradığınızda Kernel#rand, sadece bir maxargümanı destekleyen arama yaptığınızdır . Bir aralığı geçmek istiyorsanız, kullanmanız gerekir Random#rand, yani bu şekilde uygulamanız gerekir. +1
rand(3..10)
Max bir Range olduğunda rand rastgele bir sayı döndürür. Burada range.member? (Number) == true.
Aralık operatörleri arasındaki farkı not edin:
3..10 # includes 10
3...10 # doesn't include 10
Ve burada her ikisi için hızlı bir ölçüttür #sampleve #rand:
irb(main):014:0* Benchmark.bm do |x|
irb(main):015:1* x.report('sample') { 1_000_000.times { (1..100).to_a.sample } }
irb(main):016:1> x.report('rand') { 1_000_000.times { rand(1..100) } }
irb(main):017:1> end
user system total real
sample 3.870000 0.020000 3.890000 ( 3.888147)
rand 0.150000 0.000000 0.150000 ( 0.153557)
Yani yapmak rand(a..b)doğru şey
def my_rand(x, y); rand(y - x) + x; end