我在Ruby中有一系列哈希:
array = [
{:date => Wed, 04 May 2011 00:00:00 PDT -07:00,
:value => 200}
{:date => Wed, 04 May 2011 01:00:00 PDT -07:00,
:value => 100}
{:date => Tue, 03 May 2011 01:00:00 PDT -07:00,
:value => 300}
{:date => Tue, 03 May 2011 01:00:00 PDT -07:00,
:value => 150}
]
Run Code Online (Sandbox Code Playgroud)
我希望能够在每天内组合这些值,以便我有一个像这样的新数组:
array = [
{:date => Wed, 04 May 2011 00:00:00 PDT -07:00,
:value => 300}
{:date => Tue, 03 May 2011 00:00:00 PDT -07:00,
:value => 450}
]
Run Code Online (Sandbox Code Playgroud)
什么是白天搜索阵列最优雅的方式并总结每天的值?
这是我最初尝试的:
entries = [
{:date => Wed, 04 May 2011 00:00:00 PDT -07:00,
:value => 200}
{:date => Wed, 04 May 2011 01:00:00 PDT -07:00,
:value => 100}
{:date => Tue, 03 May 2011 01:00:00 PDT -07:00,
:value => 300}
{:date => Tue, 03 May 2011 01:00:00 PDT -07:00,
:value => 150}
]
first_day = 29.days.ago.beginning_of_day
total_days = 30
day_totals = (0...total_days).inject([]) do |array, num|
startat = first_day + num.day
endat = startat.end_of_day
total_value_in_day = entries.where("date >= ? and date <= ?", startat, endat).sum(:value)
array << {:date => startat, :value => total_value_in_day}
end
Run Code Online (Sandbox Code Playgroud)
我意识到我的错误在于where用于搜索对象的Rails方法,并且不能在数组上使用.所以我的主要问题是,有没有办法搜索有条件的数组或哈希.
您可以遍历条目以创建新数组:
totals = Hash.new(0)
array.each do |entry|
totals[entry[:date]] += entry[:value]
end
# Now totals will be something like this:
# => {"Wed, 04 May 2011" => 300, "Tue, 03 May 2011" => 450...}
# If you then want this in the same array format you started with:
new_array = totals.collect{ |key, value| {:date => key, :value => value} }
# => [{:date => "Wed, 04 May 2011", :value => 300}, {....}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |