एक विशेष विशेषता के लिए अधिकतम मान के साथ एक रूबी सरणी का तत्व खोजना


85

इस सवाल का एक बहुत ही सरल उत्तर है, लेकिन मैं इस समय इसका पता नहीं लगा सकता। यदि मेरे पास एक निश्चित प्रकार की वस्तुओं का एक रूबी सरणी है, और उन सभी के पास एक विशेष क्षेत्र है, तो मुझे कैसे पता चलेगा कि सरणी का तत्व उस क्षेत्र के लिए सबसे बड़ा मूल्य है?


जवाबों:



29

क्या यह मदद करता है?

my_array.max {|a,b| a.attr <=> b.attr }

(मुझे लगता है कि आपके क्षेत्र का नाम है attr)


हाँ, वही है जो मैं देख रहा था, ऐरे आपी को डांट रहा था और कुछ भी नहीं पा रहा था, एनपीबल के लिए एफी की जांच करना भूल गया, धन्यवाद!
रिचर्ड स्टोक्स 16

1
हमेशा एन्यूमरेबल एपीआई की जांच करें। इसमें वह सब कुछ है जो आपको चाहिए और किचन सिंक!
साहिल मुथू

2
मैं उपयोग करना पसंद करता हूं max_byक्योंकि यह उपयोग करने के लिए सरल है: ब्लॉक केवल एक तर्क लेता है और आपको स्पेसशिप ( <=>) ऑपरेटर का स्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है ।
डेविड ग्रेसन 23

@DavidGrayson जानकारी के लिए धन्यवाद। मुझे इस विधि के अस्तित्व का पता नहीं था। मैं आपकी टिप्पणी और जवाब पर वोट दूंगा।
p.matsinopoulos

3

आप सरणी को भी सॉर्ट कर सकते हैं और फिर अधिकतम, न्यूनतम, दूसरा सबसे बड़ा मूल्य आदि प्राप्त कर सकते हैं।

array = array.sort_by {|k,v| v}.reverse

puts hash[0]["key"]

2
यदि आप न्यूनतम या अधिकतम के लिए जा रहे हैं, तो एल्गोरिदम हैं O(n)। छाँटना न्यूनतम द्वारा है O(n log n)। जब तक आपको कुछ अनावश्यक प्रदर्शन हानि न हो, तब तक इसका उपयोग न करें।
जेमी

1
सच। सॉर्टिंग केवल अधिक से अधिक पाने के लिए एक ओवरकिल है। मैंने इसे इस मामले में जोड़ा कि कोई दूसरा सबसे बड़ा, तीसरा सबसे बड़ा आदि प्राप्त करना चाहता है
लिनुजू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.