J'ai le hash suivant {"CA"=>2, "MI"=>1, "NY"=>1}
Comment puis-je renvoyer la paire clé/valeur maximale à l'aide de ruby? Je voudrais qu'il retourne "CA"
Cela retournera la paire max hash maxi-clé en fonction de la valeur des éléments de hash:
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 maximale
hash.key(hash.values.max)
Une autre façon pourrait être la suivante:
hash.each { |k, v| puts k if v == hash.values.max }
Ceci parcourt chaque paire clé-valeur et renvoie (ou dans ce cas, met) la ou les clés dont la valeur est égale au maximum de toutes les valeurs. Cela devrait renvoyer plus d'une clé en cas d'égalité.
Vous pouvez utiliser la méthode select si vous souhaitez que la paire valeur/clé soit renvoyée:
hash.select {|k,v| v == hash.values.max }
Si vous souhaitez extraire plus d'une paire de valeurs de clé en fonction de l'ordre (deuxième plus grande, plus petite, etc.), une méthode plus efficace consiste à trier le hachage une fois, puis à 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 paire de clés la plus grande
Hash[*hash[1]]
Pour reconvertir le tableau de hachage en 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 remplacer &.last
Par .try(:last)
]. L’un ou l’autre est simplement une sauvegarde pour si votre hachage source est vide: {}