2012-01-05 51 views
0

我想創建哈希,這將是這樣的:生成散列與範圍和零作爲鍵

{nil => "Cat", 0 => "Dog", 1 => "1", ... 16 => "16"}

這就是我要做的事:

hash = { nil => "Cat",0 => "Dog" } 
(1..16).to_a.each { |e| hash[e] = e.to_s } 

而且這只是看起來醜陋。有沒有更好的方法來實現這一點(1.8.7版本)?

感謝

+0

只是出於好奇:你爲什麼要使用'nil'作爲關鍵?特別是因爲哈希的其餘部分看起來很像我的一個數組。 – polarblau 2012-01-05 10:53:33

+0

@polarblau - 我將這個散列用於模型屬性的選擇框選項,因此當用戶不選擇任何內容時,它將在數據庫中保持爲'nil'。 – shime 2012-01-05 10:58:18

+0

我不明白這個問題。你能清楚嗎?你需要什麼作爲輸出? – 2012-01-05 11:02:31

回答

1

如何:

(1..16).inject({nil => "Cat", 0 => "Dog"}) { |a, i| a[i] = i.to_s; a } 

這個工作在兩個1.8.7和1.9.2。

0

這不是case的情況嗎?

x = 2 
res = case x 
     when nil then "cat" 
     when 0  then "dog" 
     when 1  then "1" 
     when 1..16 then x.to_s*2 
     end 
p res #=> "22"