Mam licznik hash, który próbuję posortować według liczby. Problem, z którym się spotykam, polega na tym, że domyślna funkcja Hash.sort sortuje liczby jako ciągi znaków, a nie według rozmiaru liczb.
tj. Given Hash:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Uruchamianie tego kodu:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
zwróci posortowaną tablicę:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Mimo że 745 to liczba większa niż 9, 9 pojawi się jako pierwsze na liście. Kiedy próbuję pokazać, kto jest najważniejszy, utrudnia mi to życie. :)
Jakieś pomysły na sortowanie skrótu (lub nawet tablicy) według rozmiaru wartości liczbowej?
Doceniam każdą pomoc.
Odpowiedzi:
Nie mam pojęcia, jak otrzymałeś wyniki, ponieważ nie posortowałoby to według wartości ciągu ... Powinieneś odwrócić
a1
ia2
w swoim przykładzieW każdym przypadku najlepszym sposobem (według Mladena) jest:
Jeśli w rezultacie potrzebujesz skrótu, możesz użyć
to_h
(w Ruby 2.0+)źródło
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Ponieważ wartość jest ostatnim wpisem, możesz:
źródło
&:last
?sort_by(&:last)
jest efektywnym skrótem dlasort_by {|x| x.last}
stackoverflow.com/questions/1217088/…Już odpowiedziałem, ale nadal. Zmień kod na:
Konwertowane na ciągi po drodze lub nie, to wykona zadanie.
źródło
To nie jest zachowanie, które widzę:
Czy to możliwe, że gdzieś wzdłuż linii twoje liczby są konwertowane na łańcuchy? Czy jest więcej kodu, którego nie publikujesz?
źródło