2014-01-29 32 views
30

我有一个变量id,我想将它用作散列中的一个键,以便将分配给该变量的值用作散列的键。例如,如果我有变量id = 1,那么所需的结果散列值将为{ 1: 'foo' }从Ruby中的变量创建一个哈希键?

我试图创建一个与哈希,

{ 
    id: 'foo' 
} 

但是,这并不工作,而不是导致哈希与符号:id'foo'

我可以发誓我以前做过这件事,但我完全画空白。

+3

'H = {}; h [id] ='foo''或'Hash [id,'foo']' – Gumbo

+0

@Gumbo,你可以将你的评论转换为答案,这样我可以将它标记为正确吗? –

+0

@ muistooshort,即访问,而不是创建,这是一个不同的操作。 Gumbo的评论也表明语法不同。 –

回答

55

如果要填充具有一定值的新哈希值,你可以将它们传递到Hash::[]

Hash["a", 100, "b", 200]    #=> {"a"=>100, "b"=>200} 
Hash[ [ ["a", 100], ["b", 200] ] ] #=> {"a"=>100, "b"=>200} 
Hash["a" => 100, "b" => 200]   #=> {"a"=>100, "b"=>200} 

所以你的情况:

Hash[id, 'foo'] 
Hash[[[id, 'foo']]] 
Hash[id => 'foo'] 

最后的语法也可用于id => 'foo'{}

{ id => 'foo' } 

其他即,如果散列已经存在,则使用Hash#=[]

h = {} 
h[id] = 'foo' 
+1

我被困惑的问题本身,现在这个答案让我感到困惑。 (你可以告诉我什么是OP询问? –

+0

@ArupRakshit OP希望使用'id'的值作为key。'{id:'foo'}'不工作,因为'id:'foo''是等价的到':id =>'foo''。 – Gumbo

+1

啊,所以旧式散列语法可以工作,但不是新式样。谢谢。 –