Ruby group_by返回数组

时间:2015-01-23 22:19:57

标签: ruby-on-rails ruby

我有一段看起来像

的代码
runs.this_month.group_by(&:week).each do |week,runs|
  puts 'week' + week
  puts runs.size
end

现在它只返回
week00
1
week 03
1

我希望这个循环生成的是一个具有0的对象,如果该周没有运行。例如,如果我有一月份的月份,并且第一周有一次运行,第二周没有运行,第三周运行一次,上周没有运行,理想情况下会返回看起来像

[1,0,1,0]

我认为我的问题是group_by()可枚举,不知道一个月有多少个星期。

同样FWIW this_month范围在本月查找带有:created_at的所有runs。该位按预期工作,并从本月返回一组所有运行。

EDIT1:
这很草率,但似乎有效:

month = [0,0,0,0]
weeks = [0,1,2,3]
runs.this_month.group_by(&:week).each do |week,runs|
  if weeks.include? (week[0].to_i)
    month[week.to_i] = runs
  end
end

工作意味着月份 [ActiveRecord...,0,ActiveRecord...,0]

1 个答案:

答案 0 :(得分:1)

我猜weeks是整数0,1,2,3。

default_stats = { 0: [], 1: [], 2: [], 3: [] }
runs.this_month.group_by(&:week).reverse_merge(default_stats)