[英]one line hash creation in ruby
我如何使用“ times”之类的简单方法在ruby中构造哈希表
我有一个@date(即= Date.today),然后是几天...说5
5.times { |i| @date_range[:day] = (@date+i).strftime("%Y-%m-%d") }
我知道一定有一些超级简单的东西丢失了。
谢谢...
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
开头可以稍微澄清其意图,但这并不是一个明显的区别。
这似乎有效...
(1..10).each { |i| @date_range[i] = (@date+i).strftime("%Y-%m-%d") }
您想要包含今天日期和哈希键的哈希吗?
today = Date.today
days = Hash.new { |h,k| h[k] = (today + k).strftime( '%Y-%m-%d' ) }
这具有不限于几天的优点。 适用于任何键。 另外,每个密钥仅根据需要进行一次计算。
您可以使用collect
在一行中创建一个数组,但是我不确定您的哈希值在哪里...
@date_range = 5.times.collect { |i| (@date+i).strftime("%Y-%m-%d") }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.