0
votes

Ruby - Tri des hachages dans l'ordre décroissant par valeur

J'essaie de résoudre ce qui suit:

"Vous recevez un dictionnaire / hachage / objet contenant certaines langues et vos résultats de test dans les langues données. Retournez la liste des langues où votre score de test est au moins 60 , en ordre décroissant des résultats. P>

Exemples: {"Java" => 10, "ruby" => 80, "python" => 65} -> ["" ruby ​​"," python "] p>

{" hindi "=> 60," Néerlandais "=> 93," grec "=> 71} -> [" "" hollandais "," grec "," hindi "]] p>

{" c ++ "=> 50," ASM "=> 10 "Haskell" => 20} -> [] P>

J'ai du mal à trier dans l'ordre décroissant par les résultats. Voici ce que j'ai jusqu'à présent p>

def my_languages(results)
array = []
results.each { |a,b| 
results.values.sort.reverse
if b.to_i >= 60
array << a
end
}
return array
end


0 commentaires

3 Réponses :


4
votes

Vous mélangez un peu le tri et filtrent des phases. Ma solution

  1. Filtrer les résultats avec Valeur> = 60
  2. Trier pour les valeurs (décroissant, -v )
  3. extraire le premier élément de chaque tableau (nom de langue) XXX


2 commentaires

Mon plaisir :) Essayez une méthode appel à la fois et voyez quels retours


@jordantomiko accepte cette réponse s'il répond à votre question. Il y a un tic creux au sommet de gauche que vous devez cliquer pour accepter la réponse.



1
votes
a = h.select { |_,v| v >= 60 }.
      keys
a.max_by(a.size) { |k| h[k] }

0 commentaires

0
votes

Pour le rendre plus rapide, je vérifierais la valeur minimale lors du mappage:

hash = {"Hindi" => 60, "Dutch" => 93, "Greek" => 71}

hash.sort.map { |arr| arr[0] if arr[1] >= 60 }.compact

# or imo cleaner

hash.sort.select { |a| a[1] >= 60 }.map(&:first)


0 commentaires