2017-03-15 20 views
0

私は配列とハッシュを持っています。配列には日付が含まれ、ハッシュにはキーとしての日付と値としてのfloat(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の二つの日付について

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

を(2017から01

この

は私の配列です-27および2017-02-24) @revenue_greenには値がありません。

私は私に次のような出力を与えるハッシュ作成したい:なしrevenue_greenが、それは私がそれをどのように行うことができます0

を置くべき存在しないすべての日付のためにそう

@new_hash: {2017-01-27 => 0, 2017-02-24 => 0, 2017-03-10 => 7.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

ok私はコードで私の質問を更新しました。 – 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

OKこのソリューションでは新しいハッシュが得られますが、すべての値は0です – Oliver

+0

私が投稿したすべてのコードをruby 2.2.3で実行し、@new_hashを投稿しました。 – davej

+0

"@reporting_dates:..."を "@reporting_dates = ..."に変更して、コードを簡単にコピー&ペーストできるようにしました。 – davej

関連する問題