我怎样才能使用像“times”这样的简单东西在ruby中构造一个哈希
我有一个@date(即= Date.today)然后好几天...说5
5.times { |i| @date_range[:day] = (@date+i).strftime("%Y-%m-%d") }
我知道必须有一些超级简单的东西。
...谢谢
答案 0 :(得分:7)
Date
个对象也是Comparable
,因此您可以构建Range
:
@range = @date..(@date + 10)
您可以轻松地迭代它并输出结果。如果您想以数字方式访问特定日期,可以执行以下操作:
@date_range = (@date..(@date + 10)).to_a
@date_range[1]
或者,如果您确实需要事先格式化日期,请参见示例:
@date_range = (@date..(@date + 10)).map { |date| date.strftime("%Y-%m-%d") }
@date_range[1]
最后一行与您的@date_range[1]
(相当于明天/ @date + 1
)相当,即使它实际上是Array
而不是Hash
。带有连续数字键的Hash
没有多大意义:您使用Array
和免费获得这些,作为奖励,值的顺序是保存。在我看来,使用Range
s开始略微澄清意图,但这并不是一个惊人的差异。
答案 1 :(得分:1)
这似乎有用......
(1..10).each { |i| @date_range[i] = (@date+i).strftime("%Y-%m-%d") }
答案 2 :(得分:1)
您想要一个包含今天日期加上哈希键的哈希值吗?
today = Date.today
days = Hash.new { |h,k| h[k] = (today + k).strftime( '%Y-%m-%d' ) }
这具有不限于几天的优点。它适用于任何键。另外,每个键只需要计算一次,并根据需要进行计算。
答案 3 :(得分:0)
你可以使用collect
在一行中创建一个数组,但我不确定你的哈希在哪里......
@date_range = 5.times.collect { |i| (@date+i).strftime("%Y-%m-%d") }