ruby中的一行哈希创建

hol*_*den 0 ruby arrays hash ruby-on-rails

我怎样才能非常简单地使用像"times"这样简单的东西在ruby中构造一个哈希

我有一个@date(即= Date.today)然后好几天...说5

5.times { |i| @date_range[:day] = (@date+i).strftime("%Y-%m-%d") }
Run Code Online (Sandbox Code Playgroud)

我知道必须有一些超级简单的东西.

谢谢...

mol*_*olf 7

Date对象也是Comparable,所以你可以构造一个Range:

@range = @date..(@date + 10)
Run Code Online (Sandbox Code Playgroud)

您可以轻松地迭代它并输出结果.如果要以数字方式访问特定日期,可以执行以下操作:

@date_range = (@date..(@date + 10)).to_a
@date_range[1]
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实需要事先格式化日期,请参见示例:

@date_range = (@date..(@date + 10)).map { |date| date.strftime("%Y-%m-%d") }
@date_range[1]
Run Code Online (Sandbox Code Playgroud)

最后一行将等同于你的@date_range[1](等于明天/ @date + 1),即使它实际上是一个Array而不是一个Hash.Hash使用顺序数字键的A 并没有多大意义:你可以免费获得这些,Array 并且作为奖励,保留了值的顺序.在我看来,使用Ranges开始略微澄清意图,但这并不是一个惊人的差异.