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
3 Réponses :
Vous mélangez un peu le tri et filtrent des phases. Ma solution
Valeur> = 60 code> li>
- Trier pour les valeurs (décroissant,
-v code>) li>
-
extraire le premier élément de chaque tableau (nom de langue) p>
XXX PRE> LI>
ol> p>
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.
a = h.select { |_,v| v >= 60 }. keys a.max_by(a.size) { |k| h[k] }
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)