2012-10-22 21 views
6

के सबसे बड़े मूल्य (ओं) की कुंजी (ओं) को ढूंढें मेरे पास हैश है और मैं अधिकतम मूल्य की कुंजी (या)/कुंजी/मान जोड़ी (ओं) को वापस करना चाहता हूं (एस) हैश के। इसलिए, यदि केवल एक सच्चा अधिकतम है, तो वह एक कुंजी वापस कर देगा; हालांकि, यदि एक ही मूल्य के साथ कई कुंजी/मूल्य जोड़े हैं, तो यह इन सभी कुंजियों को वापस कर देगा। मैं रूबी में इसे कैसे पूरा कर सकता हूं?रूबी - हैश

my_hash.max_by {|k,v| v} #only returns one key/value pair 
+0

मैं लगता है कि इसकी एक ही सवाल का जवाब यहां http://stackoverflow.com/प्रश्न/6040494/कैसे-से-सबसे-मूल्य-के-सबसे-मूल्य-हैश –

+0

आपके हैश में आप किस प्रकार के मूल्य संग्रहीत कर रहे हैं? क्या आप केवल पूर्णांक से निपट रहे हैं? –

+0

@yasirhashmi हाँ, वही छोड़कर मैं केवल एक ही नहीं लौटना चाहता, अगर वे एक ही मूल्य रखते हैं तो मैं एकाधिक के/वी जोड़े वापस करना चाहता हूं। – diasks2

उत्तर

11

आप सभी जोड़ों को चाहते हैं, मुझे क्या करना होगा की तरह

max = my_hash.values.max 
Hash[my_hash.select { |k, v| v == max}] 
+1

क्यों ===? मुझे लगता है कि ऐसा नहीं हो सकता है जो आपको लगता है। – pguardiario

+1

@pguardiario एक बुरी आदत। मैंने इसे हटा दिया, धन्यवाद। – oldergod

2

कुछ एक एकल लाइनर:

my_hash.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max 

irb 
> z = {:tree => 3, :two => 2, 'three' => 3} 

> z.reduce({}){|h,(k,v)| (h[v] ||= []) << k;h}.max 
[3, [:tree, "three"]] 
संबंधित मुद्दे