我有一个数组和一个哈希。该数组包含日期,哈希包含日期作为键,浮点数作为值(revenue_green)。
这是我的阵列:
@reporting_dates = @month_ends.find_all {|e| e < @current_reporting_date.to_s } <<
@current_reporting_date
我的哈希:
@revenue_green = @reports_at_reporting_dates.sum('revenue_green')
这给了我以下输出:
@reporting_dates: ["2017-01-27", "2017-02-24", Fri, 10 Mar 2017]
@revenue_green: {Fri, 10 Mar 2017=>7.0}
@reporting_dates
的两个日期(2017-01-27和2017-02-24)@revenue_green
没有任何值。
我想创建一个哈希,它给出了以下输出:
@new_hash: {2017-01-27 => 0, 2017-02-24 => 0, 2017-03-10 => 7.0}
因此,对于没有revenue_green
的所有日期,它应该设置为0。
我该怎么做?
更新
@month_ends = ["2017-01-27", "2017-02-24", "2017-03-31", "2017-04-28",
"2017-05-26", "2017-06-30", "2017-07-28", "2017-08-25",
"2017-09-29", "2017-10-27", "2017-11-24", "2017-12-29"]
@all_dates = (Date.new(@reporting_year).
beginning_of_year..1.month.from_now).
to_a.reverse.select { |day| day.wday == 5 }
@current_reporting_date = @all_dates.select { |d| d <= Date.today }.first
@all_reports = Report.all
@reports_at_reporting_dates = @all_reports.where(:day => @reporting_dates).order(:day)
答案 0 :(得分:1)
假设您的起始对象是
@reporting_dates = ["2017-01-27", "2017-02-24", "Fri, 10 Mar 2017"]
@revenue_green = {"Fri, 10 Mar 2017"=>7.0}
(即引用&#34;星期五,2017年3月10日和#34;),这应该有效:
require 'date'
@new_hash = Hash.new
@reporting_dates.each {|d| @new_hash[Date.parse(d)] = @revenue_green[d] || 0}
@new_hash => {#<Date: 2017-01-27 ((2457781j,0s,0n),+0s,2299161j)>=>0, #<Date: 2017-02-24 ((2457809j,0s,0n),+0s,2299161j)>=>0, #<Date: 2017-03-10 ((2457823j,0s,0n),+0s,2299161j)>=>7.0}
或者,如果您希望新哈希中的键是字符串,
@reporting_dates.each {|d| @new_hash[Date.parse(d).strftime("%Y-%m-%d")] = @revenue_green[d] || 0}
@new_hash => {"2017-01-27"=>0, "2017-02-24"=>0, "2017-03-10"=>7.0}