반응형
숫자 값으로 루비 해시를 정렬하는 방법?
개수별로 정렬하려고하는 카운터 해시가 있습니다. 내가 겪고있는 문제는 기본 Hash.sort 함수가 숫자 크기가 아닌 문자열처럼 숫자를 정렬한다는 것입니다.
즉 해시 :
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
이 코드를 실행 :
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
정렬 된 배열을 반환합니다 :
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
745가 9보다 큰 경우에도 9가 목록에 먼저 나타납니다. 누가 가장 많은 수의 사람을 보여 주려고 할 때, 이것은 내 인생을 어렵게 만듭니다. :)
숫자 값 크기로 해시 (또는 배열)를 정렬하는 방법에 대한 아이디어가 있습니까?
도움을 주셔서 감사합니다.
당신이 종류의 문자열 값으로 ... 당신은 반대해야하지 것이기 때문에, 결과를 얻었는지 아무 생각이 a1
와 a2
당신의 예에서
어떤 경우에도 (Mladen에 따라) 가장 좋은 방법은 다음과 같습니다.
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
metrics.sort_by {|_key, value| value}
# ==> [["siteb.com", 9], ["sitec.com", 10], ["sitea.com", 745]]
결과적으로 해시가 필요한 경우 to_h
(Ruby 2.0 이상에서)
metrics.sort_by {|_key, value| value}.to_h
# ==> {"siteb.com" => 9, "sitec.com" => 10, "sitea.com", 745}
value는 마지막 항목이므로 다음을 수행 할 수 있습니다.
metrics.sort_by(&:last)
이미 대답했지만 여전히. 코드를 다음과 같이 변경하십시오.
metrics.sort {|a1,a2| a2[1].to_i <=> a1[1].to_i }
도중에 문자열로 변환되거나 변환되지 않으면 작업이 수행됩니다.
그것은 내가보고있는 행동이 아닙니다.
irb(main):001:0> metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" =>
10 }
=> {"siteb.com"=>9, "sitec.com"=>10, "sitea.com"=>745}
irb(main):002:0> metrics.sort {|a1,a2| a2[1]<=>a1[1]}
=> [["sitea.com", 745], ["sitec.com", 10], ["siteb.com", 9]]
줄을 따라 어딘가에서 숫자가 문자열로 변환 될 수 있습니까? 게시하지 않은 코드가 더 있습니까?
참고 URL : https://stackoverflow.com/questions/2540435/how-to-sort-a-ruby-hash-by-number-value
반응형
'development' 카테고리의 다른 글
Spring MVC : 유효성 검사를 수행하는 방법? (0) | 2020.06.10 |
---|---|
기본 Android 애플리케이션에서“Font Awesome”의 아이콘 및 기호를 사용하는 방법 (0) | 2020.06.10 |
C #에서 목록을 어떻게 연결합니까? (0) | 2020.06.10 |
Django에서 빈 쿼리 세트 확인 (0) | 2020.06.10 |
만드는 방법 (0) | 2020.06.09 |