2009-06-07 350 views
0

我如何使用一些簡單的像「時代」一行散列創作紅寶石

我有一個@date(即= Date.today),然後數天的很乾脆構建在Ruby中的哈希值。 ..說5

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

我知道有一些超級簡單的東西缺少。

謝謝...

+0

你需要什麼散列?密碼?快速索引?重複檢測? – 2009-06-07 19:09:04

+2

你的代碼沒有意義。您將相同的散列鍵分配給五個不同的值。你究竟在做什麼? – 2009-06-07 19:37:45

+0

看起來你試圖在一行中做得太多。 – Soviut 2009-06-07 19:39:59

回答

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開始略微澄清意圖,但它不是一個驚人的差異。

1

這似乎是工作...

(1..10).each { |i| @date_range[i] = (@date+i).strftime("%Y-%m-%d") } 
0

可以使用collect在一行中創建一個數組,但我不知道在您的哈希進來......

@date_range = 5.times.collect { |i| (@date+i).strftime("%Y-%m-%d") } 
1

需要包含今天的日期加哈希鍵的哈希?

today = Date.today 
days = Hash.new { |h,k| h[k] = (today + k).strftime('%Y-%m-%d') } 

這具有不限於幾天的優點。它可以用於任何密鑰。另外,計算僅在每個鍵上發生一次,並根據需要進行。