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