首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby中的散列和Datetime数组问题

Ruby中的散列和Datetime数组问题
EN

Stack Overflow用户
提问于 2016-01-17 14:19:22
回答 1查看 62关注 0票数 0

我正在创建一个Datetime列表,以便在Rails应用程序中进行可用的预订。我编写了一个快速函数,每天对Datetime进行分组,以便将它们组织起来,以便在我的视图中显示。

我的守则:

代码语言:javascript
复制
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 }

我的代码是在每次新的键/值对被指定时覆盖前几天的散列值,我以前使用数组得到了类似的结果。我在这里做错了什么,哈希如何覆盖以前的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-17 15:01:58

如果您有一个Rails DateTime对象数组,并且希望按月份的day对它们进行分组,并按照day值对结果进行哈希排序,那么您可以执行以下操作:

代码语言:javascript
复制
ary.sort_by(&:day).group_by(&:day)

举例说明如下:

代码语言:javascript
复制
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]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34839359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档