组合多个数组/散列选择

时间:2014-02-06 16:04:14

标签: ruby arrays hash

我有以下代码:

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计算日期范围内的哈希数。

totalsum除以size

如何将这些组合起来,这不是3个单独的项目?

2 个答案:

答案 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