我正在创建一个Datetime列表,以便在Rails应用程序中进行可用的预订。我编写了一个快速函数,每天对Datetime进行分组,以便将它们组织起来,以便在我的视图中显示。
我的守则:
def self.sort_by_day(times)
day = times[0].strftime("%d")
array = []
days_hash = Hash.new
counter = 0
while counter < times.size
if times[counter].strftime("%d") == day
array.push(times[counter])
counter += 1
else
days_hash[times[counter].strftime("%d")] = array
logger.debug "#{days_hash}"
array.clear
array << times[counter]
day = times[counter].strftime("%d")
counter += 1
end
end
days_hash
end{"18"=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日13:00:00 -0500,星期五2016年1月29日14:00:00 -0500,星期五2016年1月29日15:00 -0500,星期五,2016年1月29日16:00 -0500,星期五2016年1月29日下午17:00,"19"=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日13:00 -0500,星期五,2016年1月29日14:00 -0500,星期五,2016年1月29日15:00:00 -0500,星期五2016年1月29日下午16:00-0500,星期五,2016年1月29日下午17:00 -0500,"20"=>Fri,2016年1月29日08:00:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日:00 -0500,星期五,2016年1月29日14:00:00 -0500,星期五,2016年1月29日12:00-0500;星期五,2016年1月29日:00-0500;2016年1月29日下午15:00-0500,星期五2016年1月29日16:00 -0500,星期五,2016年1月29日17:00 -0500,"21"=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00 -0500,星期五2016年1月29日10:00 -0500,星期五2016年1月29日11:00 -0500,星期五,2016年1月29日12:00:00 -0500,星期五,2016年1月29日13:00:00 -0500,星期五2016年1月29日下午14:00 -0500,星期五,2016年1月29日15:00 -0500,星期五,2016年1月29日16:00 -0500,星期五,2016年1月29日17:00 -0500,"22"=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日:00 -0500,星期五,2016年1月29日12:00:00 -0500,星期五2016年1月29日下午1:00-0500,星期五,2016年1月29日下午14:00 -0500,星期五,2016年1月29日15:00 -0500,星期五,2016年1月29日16:00 -0500,星期五,2016年1月29日17:00 -0500,"24"=>Fri,2016年1月29日08:00:00 -0500,星期五,2016年1月29日09:00:00 -0500,星期五,2016年1月29日:00 -0500,星期五,2016年1月29日11:00:00 -0 500,星期五2016年1月29日中午12:00-0500,星期五,2016年1月29日下午13:00 -0500,星期五,2016年1月29日14:00 -0500,星期五,2016年1月29日15:00 -0500,星期五,2016年1月29日16:00 -0500,星期五,2016年1月29日17:00,"25"=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00:00 -0500,星期五2016年1月29日上午11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日下午13:00 -0500,星期五,2016年1月29日14:00 -0500,星期五,2016年1月29日15:00 -0500,星期五,2016年1月29日16:00:00 -0500,星期五,2016年1月29日17:00 -0500,"26"=>Fri,2016年1月29日:00 -0500,星期五,2016年1月29日:00:00 -0500,星期五2016年1月29日上午10:00-0500,星期五,2016年1月29日11:00-0500;星期五,2016年1月29日12:00-0500;星期五,2016年1月29日-下午13:00-0500;星期五,2016年1月29日14:00-0500;星期五,2016年1月29日15:00:00 :0500;星期五,2016年1月29日16:00-0500;星期五:2016年1月29日17:00-0500;"27"=>Fri,2016年1月29日:00:00-0500;星期五,2016年1月29日15:00-0500;星期五;2016年1月29日星期五: 17:00:00 -0500;“27”,2016年1月29日:00:00-=>Fri2016年1月29日上午11:00至0500,星期五,2016年1月29日12:00-0500;星期五,2016年1月29日13:00-0500;星期五,2016年1月29日14:00:00;星期五,2016年1月29日15:00-0500;星期五,2016年1月29日16:00:00 -0500;星期五,2016年1月29日17:00:00 -0500,"28"=>Fri,2016年1月29日:08:00,星期五,2016年1月29日,上午9:00 -0500,星期五,2016年1月29日上午10:00 -0500,星期五,2016年1月29日上午11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日下午13:00 -0500,星期五,2016年1月29日14:00 -0500,星期五,2016年1月29日15:00 -0500,星期五,2016年1月29日16:00:00 -0500,星期五,2016年1月29日14:00-0500;星期五,2016年1月29日15:00:00 -0500;2016年1月29日下午17:00," 29 "=>Fri,2016年1月29日08:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日13:00 -0500,星期五,2016年1月29日14:00 -0500,星期五,2016年1月29日15:00:00 -0500,星期五2016年1月29日下午16:00-0500,星期五,2016年1月29日下午17:00 -0500,"31"=>Fri,2016年1月29日08:00:00 -0500,星期五,2016年1月29日09:00 -0500,星期五,2016年1月29日10:00 -0500,星期五,2016年1月29日11:00 -0500,星期五,2016年1月29日12:00 -0500,星期五,2016年1月29日:00 -0500,星期五,2016年1月29日14:00:00 -0500,星期五,2016年1月29日12:00-0500;星期五,2016年1月29日:00-0500;2016年1月29日下午3:00-0500;2016年1月29日星期五16:00 -0500;2016年1月29日星期五17:00 -0500 }
我的代码是在每次新的键/值对被指定时覆盖前几天的散列值,我以前使用数组得到了类似的结果。我在这里做错了什么,哈希如何覆盖以前的值?
发布于 2016-01-17 15:01:58
如果您有一个Rails DateTime对象数组,并且希望按月份的day对它们进行分组,并按照day值对结果进行哈希排序,那么您可以执行以下操作:
ary.sort_by(&:day).group_by(&:day)举例说明如下:
require "pp"
require "active_support/core_ext/date_time"
ary = [
(DateTime.civil_from_format :local, 2015, 12, 13),
(DateTime.civil_from_format :local, 2015, 10, 10),
(DateTime.civil_from_format :local, 2015, 11, 10),
(DateTime.civil_from_format :local, 2015, 11, 11),
(DateTime.civil_from_format :local, 2015, 11, 12),
(DateTime.civil_from_format :local, 2015, 12, 13),
]
pp ary.sort_by(&:day).group_by(&:day)
#=> {10=>[Sat, 10 Nov 2015 00:00:00 +0530, Sat, 10 Oct 2015 00:00:00 +0530],
# 11=>[Wed, 11 Nov 2015 00:00:00 +0530],
# 12=>[Thu, 12 Nov 2015 00:00:00 +0530],
# 13=>[Sun, 13 Dec 2015 00:00:00 +0530, Sun, 13 Dec 2015 00:00:00 +0530]}https://stackoverflow.com/questions/34839359
复制相似问题