রুবির সাথে কীভাবে একটি মিনিট / সর্বোচ্চ সন্ধান করবেন


414

আমি ব্যবহার করতে চাই min(5,10), বা Math.max(4,7)। রুবির এই প্রভাব আছে?

উত্তর:


722

আপনি করতে পারেন

[5, 10].min

অথবা

[4, 7].max

এগুলি আনিউমারেবল মডিউল থেকে আসে , সুতরাং যে কোনও কিছু অন্তর্ভুক্ত থাকে সেগুলিতেEnumerable এই পদ্ধতিগুলি উপলব্ধ থাকবে।

ভি 2.4 নিজস্ব Array#minএবং পরিচয় করিয়ে দেয় Array#max, যা গণনার পদ্ধতিগুলির চেয়ে দ্রুততর কারণ তারা কল এড়িয়ে যায় #each

@ নিকোলাস্লিক্লিক আরেকটি বিকল্পের উল্লেখ করেছে Enumerable#minmax, তবে এবার একটি অ্যারে ফিরে আসবে [min, max]

[4, 5, 7, 10].minmax
=> [4, 10]

3
@ kaz আমি নিশ্চিত না যে আমি আপনার মন্তব্যটি বুঝতে পেরেছি।
জিগি

3
@ কাজ ... আপনি কি বুঝতে পেরেছেন std::max(4, 7)যে "বিরামচিহ্ন" এর চেয়ে বেশি [4, 7].max?
tckmn

3
@ ডুরকনব আপনি বুঝতে পেরেছেন যে std::maxআপনার নামস্থানে আমদানি করা যায় তাই এটি ঠিক হয়ে যায় max(4, 7)। অপেক্ষা করুন; উপরের দিকে তাকিয়ে, আমি দেখতে পেয়েছি যে ইতিমধ্যে।
কাজ

18
বিরামচিহ্ন এখানে সমস্যা নয়। কয়েকটি মান সর্বাধিক পেতে একটি পুরো গাদা বরাদ্দ হ'ল এখানে অন্তর্নিহিত কদর্যতা।
kdbanman

7
রুবি মূলত কম্পিউটারের জন্য নয় প্রোগ্রামারটির জন্য। ম্যাটজের কথায় "আমি আশা করি রুবি বিশ্বের প্রতিটি প্রোগ্রামারকে উত্পাদনশীল হতে, এবং প্রোগ্রামিং উপভোগ করতে এবং আনন্দিত হতে সহায়তা করে। এটি রুবি ভাষার প্রাথমিক উদ্দেশ্য" " এটি রুবির উইকিপিডিয়া পৃষ্ঠা থেকে।
অ্যারন-কোডিং

52

তুমি ব্যবহার করতে পার

[5,10].min 

অথবা

[4,7].max

এটি অ্যারেগুলির জন্য একটি পদ্ধতি।


20
প্রযুক্তিগতভাবে এটি অ্যারে নয়, এনামিউরেবলের জন্য একটি পদ্ধতি।
মেগার

1
ভি -২.৪-এর পর থেকে এনুমারেবলের চেয়ে সেরা পারফরম্যান্স সহ অ্যারেগুলির পক্ষে এটি একটি পদ্ধতি
আন্দ্রে

25

এই সমস্ত ফলাফল দুটি অধিক যুক্তি পরিচালনা করার উদ্যোগী প্রয়াসে আবর্জনা তৈরি করে। তারা কীভাবে 'ওল'-এর তুলনায় পারফর্ম করে তা দেখতে আমি কৌতূহল বোধ করব:

def max (a,b)
  a>b ? a : b
end

যাইহোক, যাইহোক, আপনার প্রশ্নের আমার সরকারী উত্তর।


রুবি ২.৪ অপ্টিমাইজ করছে এমন কিছু গণ্ডগোল রয়েছে [a,b].max, তবে এটি উপরের প্রয়োগের চেয়ে দ্রুততর কিনা তা এখনও পরিষ্কার নয়। blog.bigbinary.com/2016/11/17/…
ডেভ মর্স

2
এটি মাইক্রো অপ্টিমাইজেশান, এগুলি উভয়ই এত দ্রুত, পার্থক্য নগণ্য, বেঞ্চমার্ক দেখুন: repl.it/@AndreFigueiredo/DearWeirdSweepsoftware
Andre Figueiredo

1
এই লিখিতকরণটি কি জিসিতে সময় ব্যয় করে?
ডেভ মোর্স

20

আপনার যদি কোনও হ্যাশের সর্বাধিক / মিনিট সন্ধান করতে হয় তবে আপনি ব্যবহার করতে পারেন #max_byবা#min_by

people = {'joe' => 21, 'bill' => 35, 'sally' => 24}

people.min_by { |name, age| age } #=> ["joe", 21]
people.max_by { |name, age| age } #=> ["bill", 35]

20

প্রদত্ত উত্তরের পাশাপাশি, আপনি যদি কিছু অন্যান্য প্রোগ্রামিং ভাষার মতো ভেরিয়েবল নাম্বার বা আর্গুমেন্টগুলিতে কল করতে পারে এমন একটি # ম্যাকিউমে এমিউমারেবল # ম্যাক্সকে রূপান্তর করতে চান তবে আপনি লিখতে পারেন:

def max(*values)
 values.max
end

আউটপুট:

max(7, 1234, 9, -78, 156)
=> 1234

এটি স্প্ল্যাট অপারেটরের বৈশিষ্ট্যগুলিকে সমস্ত আর্গুমেন্ট সরবরাহকারী অ্যারে অবজেক্ট তৈরি করতে, বা কোনও আর্গুমেন্ট সরবরাহ না করা হলে খালি অ্যারে অবজেক্ট তৈরি করতে গালাগালি করে। পরবর্তী ক্ষেত্রে, পদ্ধতিটি ফিরে আসবে nil, যেহেতু খালি অ্যারে অবজেক্টে গণনাযোগ্য # সর্বাধিক কল করা হবে nil

আপনি যদি ম্যাথ মডিউলটিতে এই পদ্ধতিটি নির্ধারণ করতে চান তবে এই কৌশলটি করা উচিত:

module Math
 def self.max(*values)
  values.max
 end
end

নোট করুন যে Enumerable.max, টার্নারি অপারেটর ( ?:) এর তুলনায় কমপক্ষে, দ্বিগুণ ধীর । একটি সহজ এবং দ্রুত পদ্ধতির জন্য ডেভ মোর্সের উত্তর দেখুন ।


কিন্তু স্ট্যান্ডার্ড ক্লাস এবং মডিউলগুলি পুনরায় চালু করা একটি খারাপ অভ্যাস হিসাবে বিবেচিত হচ্ছে না?
রেডিয়ান্টশো

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