web-dev-qa-db-de.com

Wie finde ich den Schlüssel des Hashs mit dem größten Wert?

Ich habe den folgenden Hash {"CA"=>2, "MI"=>1, "NY"=>1}

Wie kann ich das maximale Schlüsselwertpaar mit ruby ​​zurückgeben? Ich möchte, dass es "CA" zurückgibt

100
JZ.

Dies gibt abhängig vom Wert der Hash-Elemente maximal ein Hash-Schlüssel-Wert-Paar zurück:

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

Ich habe diesen Weg gefunden, den Schlüssel des ersten Maximalwertes zurückzugeben

hash.key(hash.values.max)
34

Ein anderer Weg könnte sein:

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

Dies durchläuft jedes Schlüssel-Wert-Paar und gibt die Schlüssel zurück (oder in diesem Fall Puts), bei denen der Wert gleich dem Maximum aller Werte ist. Dies sollte mehr als einen Schlüssel zurückgeben, wenn ein Unentschieden vorliegt.

17

Sie können die select-Methode verwenden, wenn Sie das Schlüsselwertpaar zurückgeben möchten:

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

Wenn Sie mehr als ein Schlüsselwertpaar basierend auf der Reihenfolge (zweitgrößtes, kleinstes usw.) abrufen möchten, besteht eine effizientere Möglichkeit darin, den Hash einmal zu sortieren und dann die gewünschten Ergebnisse zu erhalten.

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

Schlüssel mit dem größten Wert

puts *hash[0][0]

Holen Sie sich max und min

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

Zweitgrößtes Schlüsselwertpaar

Hash[*hash[1]]

So konvertieren Sie das Hash-Array zurück in einen Hash

hash.to_h
3
Linju

Ich tat dies heute auf einem ähnlichen Problem und endete damit:

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

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

Für Ruby weniger als 2.3 können Sie &.last Durch .try(:last) ersetzen. Beide sind nur ein Schutz für den Fall, dass Ihr Quell-Hash leer ist: {}

1
JP Duffy