2016-07-02 5 views
1
나는 아래의 코드를 사용하여 해시 가득 배열을 정렬하고

:정렬 해시, 4 자리 숫자의 원인이 문제

array.sort_by {|hash| hash[:key_name]} 

나는 일종의 array[:damagemin] 모든 숫자입니다 혼자 4 자리 숫자를 제외하고 분류되어 있습니다 이 "1"인 경우로 분류되는 것은 :

array 
 
=> [{:heroname=>"Bastion", :winrate=>"53.6%", :damagemin=>"1079", :herokd=>"2.23:1"}, 
 
{:heroname=>"Lúcio", :winrate=>"57.6%", :damagemin=>"328", :herokd=>"1.51:1"}, 
 
{:heroname=>"Mei", :winrate=>"51%", :damagemin=>"451", :herokd=>"1.95:1"}, 
 
{:heroname=>"Reinhardt", :winrate=>"51.3%", :damagemin=>"463", :herokd=>"1.28:1"}]

이 문제를 어떻게 해결하고 한 접점을 정렬 할 수 있습니다 길이에 관계없이 최고에서 최저까지의 rs?

답변

1

문제는 damagemin은 문자열이며 문자열 정렬 알고리즘은 숫자 정렬 알고리즘과 다릅니다. 문자열 정렬은 단어의 길이를 고려하지 않습니다 (사전에서 단어 순서를 기억하십시오). 예를 들어

,

'1234' > '456' => false이 문제를 해결하려면, 당신은 말할 수 :

array.sort_by { |hash| -hash[:damagemin].to_i } 
+0

감사 @CarySwoveland, 나는 그 라인을 놓쳤다. –

+0

감사합니다. 정확히 무슨 일이 일어나야합니다! –

1

또 다른 방법 :

array = [ 
     { :heroname=>"Bastion", :winrate=>"53.6%", :damagemin=>"1079", 
      :herokd=>"2.23:1" }, 
     { :heroname=>"Lúcio", :winrate=>"57.6%", :damagemin=>"328", 
      :herokd=>"1.51:1" }, 
     { :heroname=>"Mei", :winrate=>"51%", :damagemin=>"451", 
      :herokd=>"1.95:1" }, 
     { :heroname=>"Reinhardt", :winrate=>"51.3%", :damagemin=>"463", 
      :herokd=>"1.28:1"} 
     ] 

array.sort { |g,h| h[:damagemin].to_i <=> g[:damagemin].to_i } 
    #=> [{ :heroname=>"Bastion", :winrate=>"53.6%", :damagemin=>"1079", 
    #  :herokd=>"2.23:1"}, 
    # { :heroname=>"Reinhardt", :winrate=>"51.3%", :damagemin=>"463", 
    #  :herokd=>"1.28:1"}, 
    # { :heroname=>"Mei", :winrate=>"51%", :damagemin=>"451", 
    #  :herokd=>"1.95:1"}, 
    # { :heroname=>"Lúcio", :winrate=>"57.6%", :damagemin=>"328", 
    #  :herokd=>"1.51:1"} 
    # ] 
+0

해결책 주셔서 감사합니다! –

관련 문제