Ruby on rails 查找哈希的哈希键的最大值
试图找出一种从散列中获取最大/最小值的方法。例如,我希望得到死亡人数最多的玩家和杀戮人数最多的玩家 哈希的示例:Ruby on rails 查找哈希的哈希键的最大值,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,试图找出一种从散列中获取最大/最小值的方法。例如,我希望得到死亡人数最多的玩家和杀戮人数最多的玩家 哈希的示例: { 1234 => { :steamID => 1234, :alias => "Bob", :kills => "50", :deaths => "10" }, 5678 => { :steamID => 5678, :alias => "J
{ 1234 =>
{ :steamID => 1234,
:alias => "Bob",
:kills => "50",
:deaths => "10"
},
5678 =>
{ :steamID => 5678,
:alias => "Jim",
:kills => "10",
:deaths => "12"
},
}
尝试获得以下内容的输出:
{ :most_kills =>
{ :steamID => 12345,
:name => "Bob",
:stat => "50"},
:most_deaths =>
{ :steamID => 12345,
:name => "Bob",
:stat => "50"
}
}
以下内容将查找具有最大杀伤和死亡统计信息的玩家,并将输出映射到所需格式:
input = { 1234 =>
{ steamID: 1234,
alias: "Bob",
kills: "50",
deaths: "10"
},
5678 =>
{ steamID: 5678,
alias: "Jim",
kills: "10",
deaths: "12"
},
}
output = [:kills, :deaths].each_with_object({}) do |stat, h|
max = input.max_by {|k,v| v[stat]}
h["most_#{stat}".to_sym] = {
:steamID => max[0],
:name => max[1][:alias],
:stat => max[1][stat]
}
end
输出为:
{
:most_kills => {
:steamID => 1234,
:name => "Bob",
:stat => "50"
},
:most_deaths => {
:steamID => 5678,
:name => "Jim",
:stat => "12"
}
}
我可以这样写:
def most(input, key_name)
_, v = input.max_by { |_,v| v[key_name.to_sym] }
[("most_#{key_name}").to_sym, v]
end
["deaths", "kills"].map {|key_name| most(input, key_name) }.to_h
#=> {:most_deaths=>{:steamID=>5678, :alias=>"Jim",
# :kills=>"10", :deaths=>"12"},
# :most_kills =>{:steamID=>1234, :alias=>"Bob",
# :kills=>"50", :deaths=>"10"}}
完全不清楚是什么导致您达到预期的输出。有一个小错误。。。需要更改:
:stat=>max[1][:kills]
到::stat=>max[1][“{stat}”。到_sym]