values = []
values << [ '1', 'one']
values << [ '2', 'two']
values << [ '3', 'three']
one = '1'
puts values[one]
上面的代码行会引发异常。如何从散列表中获取某个值
values = []
values << [ '1', 'one']
values << [ '2', 'two']
values << [ '3', 'three']
one = '1'
puts values[one]
上面的代码行会引发异常。如何从散列表中获取某个值
您定义了一个数组,您需要一个散列。
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'
这不是一个哈希表;这是一个数组。 values
的数值:[['1', 'one'], ['2', 'two'], ['3', 'three']]
你正在寻找的代码是:
values = {'1' => 'one', '2' => 'two'}
values['3'] = 'three'
one = '1'
puts values[one] # => 'one'
像其他人指出的那样,它实在不是一个哈希表其更像是2维数组。虽然这种方法无法有效检索值。的方法以获得从该结构的值可以是
values.select { |entry| entry[0].eql? '1' }[0][1]
您也可以使用#assoc从这种数组中获取值。例如:'values.assoc(one).last' –
可以密钥值对的数组转换成散列:
values = []
values << [ '1', 'one']
values << [ '2', 'two']
values << [ '3', 'three']
hash = Hash[values]
hash['1'] # => "one"
这使用Hash.[]
方法,其被描述at this ruby-doc.org page。
这不是一个数组,[this](http://www.youtube.com/watch?v=01NHcTM5IA4)是一个数组。 (youtube链接)或者你可以通过'values.class'来获得'values'类。 –
@Andrew Grimm:我很确定它是一个数组。即使'values.class'也这样说。 –
@undur_gongor:你说得对,我应该说“这不是一个散列表,这是一个散列表”。试图做一个幽默的评论让我觉得合适。 –