簡體   English   中英

按日期分組和匯總哈希數組

[英]Group and sum array of hashes by date

我有一系列像這樣的哈希:

[{:created=>Fri, 22 Jan 2014 13:02:13 UTC +00:00, :amount=>20}, 
{:created=>Fri, 27 Jan 2014 13:14:57 UTC +00:00, :amount=>15}, 
{:created=>Fri, 27 Jan 2014 14:42:40 UTC +00:00, :amount=>10}, 
{:created=>Fri, 28 Jan 2014 15:26:58 UTC +00:00, :amount=>10}, 
{:created=>Fri, 28 Jan 2014 15:30:18 UTC +00:00, :amount=>20}, 
{:created=>Fri, 31 Jan 2014 15:32:46 UTC +00:00, :amount=>50}, 
{:created=>Fri, 31 Jan 2014 15:33:29 UTC +00:00, :amount=>40}]

我想按日期對這些哈希值進行分組並將數量相加。 所以,在我的例子中,輸出將是:

[{:created=>"2014-01-22", :amount=>20}, 
{:created=>"2014-01-27", :amount=>25}, 
{:created=>"2014-01-28", :amount=>30}, 
{:created=>"2014-01-31", :amount=>90}]

我會這樣做:

require 'date'

a = [{:created=> 'Fri, 22 Jan 2014 13:02:13 UTC +00:00', :amount=>20}, 
{:created=>'Fri, 27 Jan 2014 13:14:57 UTC +00:00', :amount=>15}, 
{:created=>'Fri, 27 Jan 2014 14:42:40 UTC +00:00', :amount=>10}, 
{:created=>'Fri, 28 Jan 2014 15:26:58 UTC +00:00', :amount=>10}, 
{:created=>'Fri, 28 Jan 2014 15:30:18 UTC +00:00', :amount=>20}, 
{:created=>'Fri, 31 Jan 2014 15:32:46 UTC +00:00', :amount=>50}, 
{:created=>'Fri, 31 Jan 2014 15:33:29 UTC +00:00', :amount=>40}]

hsh = a.group_by { |h| Date.parse h[:created] }.map do |k,v| 
  {:created => k.to_s,:amount => v.map {|h1| h1[:amount]}.inject(:+)} 
end
hsh
# => [{:created=>"2014-01-22", :amount=>20},
#     {:created=>"2014-01-27", :amount=>25},
#     {:created=>"2014-01-28", :amount=>30},
#     {:created=>"2014-01-31", :amount=>90}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM