array group_by转换日期

时间:2013-04-26 21:21:22

标签: ruby arrays

我有一个数组:

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

2 个答案:

答案 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]}
相关问题