Ruby 排序散列,导致问题的4位数字

Ruby 排序散列,导致问题的4位数字,ruby,Ruby,我正在使用下面的代码对填充了哈希的数组进行排序: array.sort_by {|hash| hash[:key_name]} 当我按数组[:damagemin]排序时,所有的数字都被排序,除了一个4位数的数字,它被排序为“1”: 数组 =>[{:heroname=>“Bastion”,:winrate=>“53.6%,:damagemin=>“1079”,:herokd=>“2.23:1”}, {:heroname=>“Lúcio”,:winrate=>“57.6%,:damagemin=

我正在使用下面的代码对填充了哈希的数组进行排序:

array.sort_by {|hash| hash[:key_name]}
当我按
数组[:damagemin]
排序时,所有的数字都被排序,除了一个4位数的数字,它被排序为“1”:

数组
=>[{: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”}]
问题在于
damagemin
是字符串,字符串排序算法不同于数字排序算法。字符串排序不考虑单词的长度(记住字典中的单词顺序)

例如,
'1234'>'456'=>false

要解决您的问题,您可以说:

array.sort_by { |hash| -hash[:damagemin].to_i }
另一种方式:

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"}
  #   ] 
数组=[
{:heroname=>“堡垒”,: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=>“堡垒”,: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”}
#   ] 

谢谢@CarySwoveland,我没听到那句话。谢谢你,这正是我们需要做的!谢谢你的解决方案,卡里!