我有一組附加日期的數字。我需要做的是將這些數字按日曆周分組。一般來說,這很好,除非有一週沒有數字。如何按星期對數據進行分組,並在沒有數據時顯示0
這裏的數字的散列:
chart_numbers = {"2014-02-20"=>1, "2014-02-23"=>4, "2014-02-24"=>1, "2014-03-06"=>1, "2014-03-14"=>3, "2014-03-15"=>1, "2014-03-17"=>1, "2014-03-20"=>1, "2014-03-21"=>1, "2014-03-24"=>1, "2014-03-25"=>1, "2014-03-28"=>1, "2014-04-05"=>1, "2014-04-07"=>1}
這裏是「每週」時間戳(這些都是使用了JavaScript的圖表庫)。正如你所看到的,有9個時間戳。
chart_weekly_timestamps = [1392595199, 1393199999, 1393804799, 1394409599, 1395014399, 1395619199, 1396223999, 1396828799, 1397433599]
最後,這裏的代碼將chart_numbers
並將它們總結到日曆周。
chart_week = Hash[ chart_numbers.map { |h, v| [h, v] } ].group_by { |h, v| Date.parse(h).cweek }.values.map{ |v| v.sum { |vv| vv.last } }.map{ |v| v.round(0) } %>
從輸出爲:[5, 1, 1, 4, 3, 3, 1, 1]
還有的問題所在。該陣列中只有8個項目。但是我需要將它匹配到上面的星期時間戳,其中有9個數組項。
所以我需要做的是當有一個星期沒有數據,我需要顯示一個0
作爲數組項目。
和從數據庫中檢索數據?另外,你是否知道'Hash [chart_numbers.map {| h,v | [h,v]}]'是一種浪費,因爲它所做的一切都會讓你回到原來的散列? –
@Cupcake:是的......雖然我從中抽取這些數據的散列被其他一些事情所使用,所以修改查詢並不是那麼方便。 – Shpigford
'chart_weekly_timestamps'與'chart_numbers'有什麼關係? –