রুবিতে a এবং b এর মধ্যে এলোমেলো সংখ্যা কীভাবে তৈরি করা যায়?


189

3 এবং 10 এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে, উদাহরণস্বরূপ, আমি ব্যবহার করি: rand(8) + 3

এটি করার মতো কোনও সুন্দর উপায় আছে (এরকম কিছু rand(3, 10))?


4
def my_rand(x, y); rand(y - x) + x; end
থিও

@ থিও, যাইহোক y - x + 1
নাকিলন

1
10 এবং 10 ** 24 এ আপনার সঠিক উত্তর সীমা হিসাবে চেষ্টা করুন: 0 খুব দীর্ঘ প্রতীক্ষিত হবে :)
xt.and.r

5
এটি কাজ করে:rand(3..10)

উত্তর:


323

আপডেট: রুবি 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 এ # চয়েস নামকরণ করা হয়েছিল এবং পরবর্তী সংস্করণগুলিতে পুনরায় নামকরণ করা হয়েছে।

তবে যাইহোক, অ্যারে উত্পন্ন করার জন্য সংস্থান প্রয়োজন এবং আপনি ইতিমধ্যে লিখেছেন সমাধানটি সর্বোত্তম, আপনি এটি করতে পারেন।


ধন্যবাদ! আমি মনে করি আমি পুরানো এবং ভাল পদ্ধতির সাথে থাকব :)
মিশা মোরোশকো

32
এটি সত্যিই খারাপ ধারণা, বিশেষত যদি আপনার a এবং b অজানা আকারের হয়। (1000000000000000000000..10000000000000000) চেষ্টা করুন। টো_এ. নমুনাটি দেখুন এবং আমার অর্থ কী:)
পিক্সিলিথ

4
@ পিক্সিলিটার, যদি আপনার আরও ভাল ধারণা থাকে, যা প্রশ্নটির উত্তর দেয় তবে আপনাকে পোস্টে স্বাগত জানাই।
নাকিলন

rand(a..b)কাজ না করে, এটা splits: TypeError: can't convert Range into Integer। এটি রুবি ২.০
তে

2
@fguillen এটি আমার জন্য 1.9.3-তে কাজ করে, আমি জানি না কেন এটি আপনার পক্ষে কাজ করছে না।
মাইকেল ডারস্ট

87
Random.new.rand(a..b) 

aআপনার সর্বনিম্ন মান কোথায় এবং bআপনার সর্বোচ্চ মান।


4
নোট গুরুত্বপূর্ণ পার্থক্য হল যে আপনি শুধু কল rand()আপনি আহ্বান করা হয় Kernel#rand, যা শুধুমাত্র একটি সমর্থন maxযুক্তি। আপনি যদি কোনও পরিসর পাস করতে চান তবে আপনাকে ব্যবহার করতে হবে Random#rand, মানে আপনাকে এইভাবে প্রয়োগ করতে হবে। +1 টি
grumpit

2
উপরেরটি প্রয়োগ করা উচিত যে উপরেরটি 1.9.2
গ্রম্পিট

এটিতে ক এবং বি অন্তর্ভুক্ত রয়েছে?
অভ্রদীপ

12
rand(3..10)

কার্নেল # রান্ড

যখন সর্বাধিক একটি ব্যাপ্তি হয়, র্যান্ড এমন একটি এলোমেলো সংখ্যা প্রদান করে যেখানে श्रेणी.মেমবার? (সংখ্যা) == সত্য।



3

এই উত্তরটি দেখুন : রুবিতে রয়েছে 1.9.2, তবে পূর্ববর্তী সংস্করণগুলিতে নয়। ব্যক্তিগতভাবে আমি র্যান্ড (8) + 3 ভাল বলে মনে করি তবে আপনি যদি আগ্রহী হন তবে লিঙ্কে বর্ণিত র্যান্ডম ক্লাসটি পরীক্ষা করে দেখুন।




2

এবং এখানে উভয়ের জন্য একটি দ্রুত মানদণ্ড #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)সঠিক জিনিস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.