Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 查找哈希的哈希键的最大值_Ruby On Rails_Ruby_Hash - Fatal编程技术网

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]