Réponses:
Cela renverra la paire clé-valeur de hachage maximale en fonction de la valeur des éléments de hachage:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
J'ai trouvé de cette façon, retourne la clé de la première valeur max
hash.key(hash.values.max)
Une autre façon pourrait être la suivante:
hash.each { |k, v| puts k if v == hash.values.max }
Cela parcourt chaque paire clé-valeur et renvoie (ou dans ce cas met) la ou les clés où la valeur est égale au maximum de toutes les valeurs. Cela devrait renvoyer plus d'une clé en cas d'égalité.
Si vous souhaitez récupérer plus d'une paire clé / valeur en fonction de l'ordre (deuxième plus grand, plus petit, etc.), un moyen plus efficace sera de trier le hachage une fois, puis d'obtenir les résultats souhaités.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Clé de plus grande valeur
puts *hash[0][0]
Obtenez max et min
puts *hash[0], *hash[hash.length-1]
2e plus grande paire valeur / clé
Hash[*hash[1]]
Pour reconvertir le tableau de hachage en un hachage
hash.to_h
Je l'ai fait aujourd'hui sur un problème similaire et je me suis retrouvé avec ceci:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
Pour Ruby inférieur à 2.3, vous pouvez le remplacer &.last
par l' .try(:last)
un ou l'autre n'est qu'une sauvegarde si votre hachage source est vide:{}
Cela renverra la dernière clé du hachage triée par taille; cependant, il peut y avoir deux clés avec la même valeur.
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)