2013-04-26 43 views
1

我有一個數組:陣列GROUP_BY轉換日期

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"} 
] 

我想通過使用array_of_hashes.group_by {|d| d["Date"] }到GROUP_BY我可以GROUP_BY整個日期字符串日期字符串(例如,「2013年4月6日」)的日期然而這需要整個字符串。

如何我只是不計時間的日期組? TIA

回答

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" 
+0

謝謝韋恩。簡單,優雅,非常感謝。 – 2013-04-27 09:05:43

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]} 
+2

順便說一聲你知道Ruby爲字符串「name」,「Date」的每個外觀創建一個對象嗎?符號可以爲你節省一些記憶。 – steenslag 2013-04-26 21:44:22

+0

非常感謝,非常感謝 – 2013-04-27 09:06:54