J'ai un hachage de compteur que j'essaie de trier par décompte. Le problème que je rencontre est que la fonction par défaut Hash.sort trie les nombres comme des chaînes plutôt que par taille de nombre.
ie Donné Hash:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Exécution de ce code:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
renverra un tableau trié:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Même si 745 est un nombre supérieur à 9, 9 apparaîtra en premier dans la liste. En essayant de montrer qui a le plus grand nombre, cela me rend la vie difficile. :)
Des idées sur la façon de trier un hachage (ou même un tableau) par taille de valeur numérique?
J'apprécie toute aide.
Réponses:
Aucune idée de la façon dont vous avez obtenu vos résultats, car il ne trierait pas par valeur de chaîne ... Vous devriez inverser
a1
eta2
dans votre exempleLe meilleur moyen dans tous les cas (selon Mladen) est:
Si vous avez besoin d'un hachage, vous pouvez utiliser
to_h
(dans Ruby 2.0+)la source
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Puisque la valeur est la dernière entrée, vous pouvez faire:
la source
&:last
?sort_by(&:last)
est en fait un raccourci poursort_by {|x| x.last}
stackoverflow.com/questions/1217088/…Déjà répondu mais toujours. Changez votre code en:
Converti en chaînes en cours de route ou non, cela fera l'affaire.
la source
Ce n'est pas le comportement que je vois:
Est-il possible que quelque part le long de la ligne, vos nombres soient convertis en chaînes? Y a-t-il plus de code que vous ne publiez pas?
la source