Ich habe einen Zähler-Hash, den ich nach Zählung sortieren möchte. Das Problem, auf das ich stoße, ist, dass die Standardfunktion Hash.sort Zahlen eher nach Zeichenfolgen als nach Zahlengröße sortiert.
dh gegebener Hash:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Ausführen dieses Codes:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
gibt ein sortiertes Array zurück:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Obwohl 745 eine größere Zahl als 9 ist, wird 9 zuerst in der Liste angezeigt. Wenn ich versuche zu zeigen, wer die höchste Punktzahl hat, macht mir das das Leben schwer. :) :)
Irgendwelche Ideen, wie man einen Hash (oder sogar ein Array) nach der Größe des Zahlenwerts sortiert?
Ich freue mich über jede Hilfe.
Antworten:
Keine Ahnung , wie Sie Ihre Ergebnisse erhalten, da es von String - Wert nicht sortieren würde ... Sie umkehren sollen
a1
unda2
in Ihrem BeispielDer beste Weg ist auf jeden Fall (nach Mladen):
Wenn Sie als Ergebnis einen Hash benötigen, können Sie ihn verwenden
to_h
(in Ruby 2.0+).quelle
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Da value der letzte Eintrag ist, können Sie Folgendes tun:
quelle
&:last
?sort_by(&:last)
ist effektiv Abkürzung fürsort_by {|x| x.last}
stackoverflow.com/questions/1217088/…Bereits beantwortet, aber immer noch. Ändern Sie Ihren Code in:
Auf dem Weg in Strings konvertiert oder nicht, wird dies den Job erledigen.
quelle
Das ist nicht das Verhalten, das ich sehe:
Ist es möglich, dass Ihre Zahlen irgendwo entlang der Linie in Zeichenfolgen umgewandelt werden? Gibt es mehr Code, den Sie nicht veröffentlichen?
quelle