UFO ET IT

Ruby에서 해시 값을 기준으로 내림차순 정렬

ufoet 2020. 11. 12. 20:39
반응형

Ruby에서 해시 값을 기준으로 내림차순 정렬


내 입력 해시 : h = { "a" => 20, "b" => 30, "c" => 10 }

오름차순 정렬 : h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

하지만 난 필요해 [["b", 30], ["a", 20], ["c", 10]]

어떻게하면 다른 방향으로 작동 할 수 <=>있습니까? 무슨 뜻인가요?


한 번에 더 깨끗하고, 더 깨끗하고, 더 빠르게 만들 수 있습니다! 이렇게 :

h.sort_by {|k,v| v}.reverse

무작위 값으로 1000 개 요소 해시를 정렬하는 3000 회 반복에 대한 타이밍을 벤치마킹하고 다음과 같은 시간을 얻었습니다.

h.sort {|x,y| -(x[1]<=>y[1])} -- 16.7s
h.sort {|x,y| y[1] <=> x[1]} -- 12.3s
h.sort_by {|k,v| -v} -- 5.9s
h.sort_by {|k,v| v}.reverse -- 3.7

h.sort {|a,b| b[1]<=>a[1]}

<=>두 피연산자를 비교하여 첫 번째 값이 낮 으면 -1을, 같으면 0을, 첫 번째 값이 높으면 1을 반환합니다. 이것은 -(a[1]<=>b[1])순서를 반대로 할 수 있음을 의미합니다 .


매우 간단합니다. h.sort_by { |k, v| -v }

참고 URL : https://stackoverflow.com/questions/4264133/descending-sort-by-value-of-a-hash-in-ruby

반응형