Spa*_*s38 2 ruby hash ruby-on-rails
我有一个哈希,我选择仪表板的所有数据来显示性能,因为显示最新值并不总是有帮助,所以我尝试从哈希中选择最后 4 个值。
我已经尝试过thing.last(4),但没有成功。
代码如下,主要是尝试显示 的最后 4 个点top_points或平均点。
注:红宝石1.9
metric.sort.each do |key, value|
top_point = { x: Time.parse(key).to_time.to_i, y: value['top_10'] }
top_points << top_point
average_point = { x: Time.parse(key).to_time.to_i, y: value['average'] }
average_points << average_point
end
Run Code Online (Sandbox Code Playgroud)
下面使用Hash#select来避免将哈希转换为数组、操作数组然后将其转换回哈希的需要。
h = { "b"=>1, "d"=>6, "f"=>3, "e"=>1, "c"=>3, "a"=>7 }
Run Code Online (Sandbox Code Playgroud)
sz = h.size
#=> 6
h.select { (sz -= 1) < 4 }
#=> {"f"=>3, "e"=>1, "c"=>3, "a"=>7}
Run Code Online (Sandbox Code Playgroud)
或者,如果使用 Ruby 2.5+,可以使用Hash#slice:
h.slice(*h.keys[-4..-1])
#=> {"f"=>3, "e"=>1, "c"=>3, "a"=>7}
Run Code Online (Sandbox Code Playgroud)
如果使用 Ruby 2.6+,则可以使用Endless range:
h.slice(*h.keys[-4..])
#=> {"f"=>3, "e"=>1, "c"=>3, "a"=>7}
Run Code Online (Sandbox Code Playgroud)