2011-11-07 18 views
56

के लिए अधिकतम मूल्य के साथ रूबी सरणी का तत्व ढूंढना शायद इस प्रश्न का एक बहुत ही सरल जवाब है, लेकिन मैं इस समय अपने जीवन के लिए इसे समझ नहीं सकता। यदि मेरे पास एक निश्चित प्रकार की ऑब्जेक्ट्स की रूबी सरणी है, और उनके पास एक विशेष फ़ील्ड है, तो मैं उस क्षेत्र के लिए सबसे बड़ा मान सरणी का तत्व कैसे ढूंढूं?एक विशेष विशेषता

+0

संभावित डुप्लिकेट [अधिक ब्लॉक के बिना अधिकतम/मिनट का संक्षिप्त संस्करण] (http://stackoverflow.com/questions/7087717/more-concise-version-of-max-min-without-the-block) –

उत्तर

112
array.max_by do |element| 
    element.field 
end 

या:

array.max_by(&:field) 
+0

अधिक सहायक तरीकों के लिए गणना करने योग्य मॉड्यूल के दस्तावेज़ों की जांच करें। –

24

क्या इससे मदद मिलती है?

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

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

+0

हां यह वही है जो मैं देख रहा था के लिए, ऐरे एपीआई को खराब कर रहा था और कुछ भी नहीं मिला, धन्यवाद, एंबेबल के लिए एपीआई जांचना, धन्यवाद! –

+1

हमेशा गणना करने योग्य API की जांच करें। इसमें सब कुछ है जो आपको चाहिए * और * रसोई सिंक! –

+2

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

0

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

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

puts hash[0]["key"] 
+1

यदि आप केवल न्यूनतम या अधिकतम के लिए जा रहे हैं, तो एल्गोरिदम 'ओ (एन) 'हैं। सॉर्टिंग न्यूनतम 'ओ (एन लॉग एन)' है। इसका उपयोग तब तक न करें जब तक आपको कुछ अनावश्यक प्रदर्शन नुकसान न हो। – Jamie

संबंधित मुद्दे