sourcetip

루비 해시를 숫자 값으로 정렬하는 방법은 무엇입니까?

fileupload 2023. 6. 2. 21:17
반응형

루비 해시를 숫자 값으로 정렬하는 방법은 무엇입니까?

카운트별로 정렬하려는 카운터 해시가 있습니다.문제는 기본 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가 목록에 먼저 나타납니다.누가 1등인지 보여주려고 할 때, 이것은 제 삶을 어렵게 만들고 있습니다.:)

해시(또는 배열)를 숫자 값 크기별로 정렬하는 방법에 대한 아이디어가 있습니까?

어떤 도움이든 감사합니다.

결과가 문자열 값으로 정렬되지 않기 때문에 결과를 어떻게 얻었는지 모르겠습니다.당신은 반대로 해야 합니다.a1그리고.a2당신의 예에 있어서는

어떤 경우에도 (믈라덴에 따르면) 최선의 방법은 다음과 같습니다.

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}

값이 마지막 항목이므로 다음 작업을 수행할 수 있습니다.

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

반응형