2011-10-12 68 views
1
values = [] 
values << [ '1', 'one'] 
values << [ '2', 'two'] 
values << [ '3', 'three'] 

one = '1' 

puts values[one] 

上面的代码行会引发异常。如何从散列表中获取某个值

+0

这不是一个数组,[this](http://www.youtube.com/watch?v=01NHcTM5IA4)是一个数组。 (youtube链接)或者你可以通过'values.class'来获得'values'类。 –

+0

@Andrew Grimm:我很确定它是一个数组。即使'values.class'也这样说。 –

+0

@undur_gongor:你说得对,我应该说“这不是一个散列表,这是一个散列表”。试图做一个幽默的评论让我觉得合适。 –

回答

4

您定义了一个数组,您需要一个散列。

values = {} 
values['1'] = 'one' 
values['2'] = 'two' 
values['3'] = 'three' 

one = '1' 
values[one] #=> 'one' 

那当然,你应该写:

values = { 
'1' => 'one', 
'2' => 'two', 
'3' => 'three', 
} 

one = '1'  
values[one] #=> 'one' 
3

这不是一个哈希表;这是一个数组。 values的数值:[['1', 'one'], ['2', 'two'], ['3', 'three']]

你正在寻找的代码是:

values = {'1' => 'one', '2' => 'two'} 
values['3'] = 'three' 

one = '1' 

puts values[one] # => 'one' 
1

像其他人指出的那样,它实在不是一个哈希表其更像是2维数组。虽然这种方法无法有效检索值。的方法以获得从该结构的值可以是

values.select { |entry| entry[0].eql? '1' }[0][1] 
+0

您也可以使用#assoc从这种数组中获取值。例如:'values.assoc(one).last' –

1

可以密钥值对的数组转换成散列:

values = [] 
values << [ '1', 'one'] 
values << [ '2', 'two'] 
values << [ '3', 'three'] 

hash = Hash[values] 
hash['1'] # => "one" 

这使用Hash.[]方法,其被描述at this ruby-doc.org page