3 এবং 10 এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে, উদাহরণস্বরূপ, আমি ব্যবহার করি: rand(8) + 3
এটি করার মতো কোনও সুন্দর উপায় আছে (এরকম কিছু rand(3, 10))?
y - x + 1।
rand(3..10)
3 এবং 10 এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে, উদাহরণস্বরূপ, আমি ব্যবহার করি: rand(8) + 3
এটি করার মতো কোনও সুন্দর উপায় আছে (এরকম কিছু rand(3, 10))?
y - x + 1।
rand(3..10)
উত্তর:
আপডেট: রুবি 1.9.3 Kernel#randরেঞ্জগুলিও গ্রহণ করে
rand(a..b)
http://www.rubyinside.com/ruby-1-9-3-introduction-and-changes-5428.html
অ্যারেতে রূপান্তর করা খুব ব্যয়বহুল এবং এটি অপ্রয়োজনীয়।
(a..b).to_a.sample
অথবা
[*a..b].sample
রুবি স্ট্যান্ডার্ড 1.8.7+।
দ্রষ্টব্য: 1.8.7 এ # চয়েস নামকরণ করা হয়েছিল এবং পরবর্তী সংস্করণগুলিতে পুনরায় নামকরণ করা হয়েছে।
তবে যাইহোক, অ্যারে উত্পন্ন করার জন্য সংস্থান প্রয়োজন এবং আপনি ইতিমধ্যে লিখেছেন সমাধানটি সর্বোত্তম, আপনি এটি করতে পারেন।
Random.new.rand(a..b)
aআপনার সর্বনিম্ন মান কোথায় এবং bআপনার সর্বোচ্চ মান।
rand()আপনি আহ্বান করা হয় Kernel#rand, যা শুধুমাত্র একটি সমর্থন maxযুক্তি। আপনি যদি কোনও পরিসর পাস করতে চান তবে আপনাকে ব্যবহার করতে হবে Random#rand, মানে আপনাকে এইভাবে প্রয়োগ করতে হবে। +1 টি
rand(3..10)
যখন সর্বাধিক একটি ব্যাপ্তি হয়, র্যান্ড এমন একটি এলোমেলো সংখ্যা প্রদান করে যেখানে श्रेणी.মেমবার? (সংখ্যা) == সত্য।
মাত্র পরিসীমা অপারেটরগুলির মধ্যে পার্থক্যটি নোট করুন:
3..10 # includes 10
3...10 # doesn't include 10
এবং এখানে উভয়ের জন্য একটি দ্রুত মানদণ্ড #sampleএবং #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)
সুতরাং, করছেন rand(a..b)সঠিক জিনিস
def my_rand(x, y); rand(y - x) + x; end