2017-03-15 107 views
0

我有一个数组和一个散列。数组包含日期,并且哈希包含日期作为关键字和浮点作为值(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

我怎么能这样做?

UPDATE

@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

您可以编辑您的答案,并将您的代码示例插入为文本而不是图片吗? – mysmallidea

+0

好吧,我用代码更新了我的问题。 – Oliver

+0

请阅读“[mcve]”。我们需要能够复制问题的最小代码。 '@ month_ends','@ current_reporting_date'和'@ reports_at_reporting_dates'没有定义,所以我们无法运行和测试来帮助您。 –

回答

1

假设你的起始对象是

@reporting_dates = ["2017-01-27", "2017-02-24", "Fri, 10 Mar 2017"] 
@revenue_green = {"Fri, 10 Mar 2017"=>7.0} 

(即引号 “周五,2017年3月10日”),那么这应该工作:

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} 
+0

好的这个解决方案我得到一个新的散列,但所有的值都是0 – Oliver

+0

我运行了所有我发布的代码,在ruby 2.2.3中,并且获得了我发布的@new_hash,两个版本。 – davej

+0

只需将“@reporting_dates:...”更改为“@reporting_dates = ...”,便于复制和粘贴代码。 – davej