繁体   English   中英

红宝石中的一线哈希创建

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM