我有以下代码:
sum = array_of_hashes.select{ |key| (date_range).include? Date.parse(key[:created])}.map { |h| h[:amount] }.sum
size = array_of_hashes.select{ |key| (date_range).include? Date.parse(key[:created])}.size
total = sum / size
sum
选择日期范围内的所有哈希值,并将:amount
键的所有值相加。
size
计算日期范围内的哈希数。
total
将sum
除以size
。
如何将这些组合起来,这不是3个单独的项目?
答案 0 :(得分:3)
我认为这很简单:
selected = array_of_hashes.select { ... }
avarage = selected.map { ... }.sum / selected.size
注意:使用include?
日期范围非常低效,因为它需要遍历整个日期范围,我建议改为使用cover?
。
答案 1 :(得分:0)
真的没有办法做得更紧凑。一种替代方案可能如下:
average = (selected = array_of_hashes.select { ... }.map { ... }).sum/selected.size.to_f