从包含"nil"的哈希中查找最高值

use*_*805 0 ruby hash

我有一个看起来像这样的哈希

@hash = {
  0=>[{"name"=>"guest", "value"=>7.9}],
  1=>[nil], 2=>[nil], 3=>[nil], 4=>[nil], 5=>[nil], 6=>[nil], 7=>[nil], 8=>[nil],
  9=>[nil], 10=>[nil], 11=>[nil], 12=>[nil], 13=>[nil], 14=>[nil], 15=>[nil],
  16=>[nil], 17=>[nil], 18=>[nil],
  19=>[{"name"=>"test", "value"=>2.5}],
  20=>[{"name"=>"roam", "value"=>2.5}],
  21=>[{"name"=>"test2", "value"=>1.58}],
  22=>[{"name"=>"dff", "value"=>1.9}],
  23=>[{"name"=>"dddd", "value"=>3.16}]
}
Run Code Online (Sandbox Code Playgroud)

我想在变量中使用此哈希中的最高值.输出应该是

@h = 7.9 \\only float value which should be highest among all
Run Code Online (Sandbox Code Playgroud)

所以我这样做

@hash.each do |k, v|
  if !v.nil?
    @h= [v.flatten.sort{ |v1, v2| v2['value'] <=> v1['value'] }.first['value']]
  end
end
Run Code Online (Sandbox Code Playgroud)

但有时候它会起作用,而且大部分时间都没有.

Sha*_*ell 6

@hash.values.flatten.compact.map { |h| h["value"] }.max
=> 7.9
Run Code Online (Sandbox Code Playgroud)

这相当于:

  • 获取哈希值作为数组
  • 展平values数组中的所有元素
  • 压缩以删除所有nil条目
  • 将其余条目映射到["value"]散列中的元素
  • 返回所有这些值的最大值

它对你的格式做了很多假设@hash.