Antworten:
Dies gibt je nach Wert der Hash-Elemente ein maximales Hash-Schlüssel-Wert-Paar zurück:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Ich habe auf diese Weise den Schlüssel des ersten Maximalwerts zurückgegeben
hash.key(hash.values.max)
Ein anderer Weg könnte wie folgt 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 setzt sie in diesem Fall), wobei der Wert gleich dem Maximum aller Werte ist. Dies sollte mehr als einen Schlüssel zurückgeben, wenn es ein Unentschieden gibt.
Wenn Sie mehr als ein Schlüsselwertpaar basierend auf der Reihenfolge (zweitgrößte, kleinste usw.) abrufen möchten, ist es effizienter, 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 wieder in einen Hash
hash.to_h
Ich habe dies heute bei einem ähnlichen Problem getan und bin zu folgendem Ergebnis gekommen:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
Ruby weniger als 2,3 können Sie ersetzen &.last
mit .try(:last)
Entweder man ist nur ein Schutz für die, wenn Ihre Quelle Hash leer ist :{}
Dies gibt den letzten Schlüssel des Hashs zurück, sortiert nach Größe. Möglicherweise gibt es jedoch zwei Schlüssel mit demselben Wert.
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)