सबसे बड़े मूल्य हैश की कुंजी कैसे खोजें?


110

मेरे पास निम्नलिखित हैश है {"CA"=>2, "MI"=>1, "NY"=>1}

मैं माणिक का उपयोग करके अधिकतम प्रमुख मूल्य जोड़ी कैसे वापस कर सकता हूं? मैं इसे "CA" वापस करना चाहूंगा


3
क्या होगा अगर एक ही सबसे बड़े मूल्य के साथ कई चाबियाँ हैं?
गाबे

जवाबों:


230

यह हैश तत्वों के मूल्य के आधार पर अधिकतम हैश की-वैल्यू जोड़ी लौटाएगा:

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

49
ध्यान देने योग्य है कि आपको [की, वैल्यू] के साथ 2 एलिमेंट एरे वापस
मिलेंगे

6
hash.max_by {| k, v | v} [0] कुंजी देता है।
नृ .21

4
इसके अलावा एक ध्यान देने योग्य स्थिति के क्रम में पहले टाई जाएगा।
रॉबी गिलफॉयल

8
आप जोड़ी के लिए hash.max_by (&: last) भी कर सकते हैं और hash.max_by (&: last)। कुंजी के लिए।
Mahemoff


16

एक और तरीका इस प्रकार हो सकता है:

hash.each { |k, v| puts k if v == hash.values.max }

यह प्रत्येक कुंजी-मूल्य जोड़ी के माध्यम से चलता है और रिटर्न (या इस मामले में डालता है) कुंजी (एस) है जहां मूल्य सभी मूल्यों की अधिकतम के बराबर है। यदि टाई है तो यह एक से अधिक कुंजी वापस करना चाहिए।


5

यदि आप कुंजी मान जोड़ी लौटना चाहते हैं तो आप चयन विधि का उपयोग कर सकते हैं:

hash.select {|k,v| v == hash.values.max }

4

यदि आप ऑर्डर (दूसरा सबसे बड़ा, सबसे छोटा आदि) के आधार पर एक से अधिक महत्वपूर्ण मूल्य जोड़ी प्राप्त करना चाहते हैं, तो एक अधिक कुशल तरीका हैश को एक बार छांटना और फिर वांछित परिणाम प्राप्त करना होगा।

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end

सबसे बड़े मूल्य की कुंजी

puts *hash[0][0]

अधिकतम और न्यूनतम प्राप्त करें

puts *hash[0], *hash[hash.length-1]

2 सबसे बड़ी कुंजी मूल्य जोड़ी

Hash[*hash[1]]

हैश सरणी को हैश में बदलने के लिए

hash.to_h

1

मैंने आज एक ऐसी ही समस्या पर यह किया और इसके साथ समाप्त हुआ:

hash = { "CA"=>2, "MI"=>1, "NY"=>1 }

hash.invert.max&.last
=> "CA" 

रूबी 2.3 से कम के लिए आप या तो एक के &.lastसाथ बदल सकते हैं .try(:last), अगर आपका स्रोत हैश खाली है तो सिर्फ एक सुरक्षा के लिए है:{}


-3

यह आकार द्वारा क्रमबद्ध हैश की अंतिम कुंजी लौटाएगा; हालांकि, एक ही मूल्य के साथ दो कुंजी हो सकती हैं।

def largest_hash_key(hash)
  key = hash.sort{|a,b| a[1] <=> b[1]}.last
  puts key
end

hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)

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