我有一个数组:
array=[
{"name"=>"Henry Jones ", "Date"=>"2013-04-09 15:09:02", "Duration"=>"0:00:00", "Call Type"=>"Outgoing"},
{"name"=>"Barry Smith ", "Date"=>"2013-04-08 13:51:03", "Duration"=>"0:00:48", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-04 19:30:19", "Duration"=>"0:00:49", "Call Type"=>"Outgoing"},
{"name"=>"Alistair Morgan ", "Date"=>"2013-04-05 13:14:07", "Duration"=>"0:00:03", "Call Type"=>"Outgoing"},
{"name"=>"Quentin Blah", "Date"=>"2013-04-05 13:19:44", "Duration"=>"0:04:28", "Call Type"=>"Missed"},
{"name"=>"Quentin Blah", "Date"=>"2013-04-05 13:25:19", "Duration"=>"0:09:45", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-05 14:35:29", "Duration"=>"0:00:24", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-05 15:54:53", "Duration"=>"0:00:00", "Call Type"=>"Missed"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-06 16:21:20", "Duration"=>"0:00:47", "Call Type"=>"Outgoing"}
]
我想group_by日期字符串的日期(例如“2013-04-06”)我可以使用array_of_hashes.group_by {|d| d["Date"] }
对整个日期字符串进行分组,但这需要整个字符串。
如何在不包括时间的日期进行分组? TIA
答案 0 :(得分:3)
你快到了。由于日期与空格分开,您可以使用String#split将时间与时间分开,然后Array#first获取日期:
array_of_hashes.group_by do |hash|
hash['Date'].split.first
end
使用IRB,您可以看到它是如何工作的:
$ irb
2.0.0p0 :001 > date = "2013-04-06 16:21:20"
=> "2013-04-06 16:21:20"
2.0.0p0 :002 > date.split
=> ["2013-04-06", "16:21:20"]
2.0.0p0 :003 > date.split.first
=> "2013-04-06"
答案 1 :(得分:2)
Date
的值只是一个字符串。幸运的是,这是一个表现良好,固定宽度,可排序的字符串。前10个字符是我们想要的:
array=[
{"name"=>"Henry Jones ", "Date"=>"2013-04-09 15:09:02", "Duration"=>"0:00:00", "Call Type"=>"Outgoing"},
{"name"=>"Barry Smith ", "Date"=>"2013-04-08 13:51:03", "Duration"=>"0:00:48", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-04 19:30:19", "Duration"=>"0:00:49", "Call Type"=>"Outgoing"},
{"name"=>"Alistair Morgan ", "Date"=>"2013-04-05 13:14:07", "Duration"=>"0:00:03", "Call Type"=>"Outgoing"},
{"name"=>"Quentin Blah", "Date"=>"2013-04-05 13:19:44", "Duration"=>"0:04:28", "Call Type"=>"Missed"},
{"name"=>"Quentin Blah", "Date"=>"2013-04-05 13:25:19", "Duration"=>"0:09:45", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-05 14:35:29", "Duration"=>"0:00:24", "Call Type"=>"Incoming"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-05 15:54:53", "Duration"=>"0:00:00", "Call Type"=>"Missed"},
{"name"=>"Henry Jones ", "Date"=>"2013-04-06 16:21:20", "Duration"=>"0:00:47", "Call Type"=>"Outgoing"}
]
p array.group_by{|call| call["Date"][0..9]}