2012-01-05 56 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"