我有一个散列数组:
array_hash = [{product: 'A', qty: 1}, {product: 'B', qty: 2}]
我想得到第一个关键字"product"
的值。
我得到了这个代码的预期散列:
get_first_hash = array_hash[0]
# => {product: 'A', qty: 1}
但是,此代码返回nil
:
get_value = get_first_hash['product']
# => nil
我希望有人能告诉我这件事。
希望这就足够了!
array_hash.first[:product]
如果你想要第二个,你只需要做
array_hash.second[:product]
此外,.first只是执行array_hash[0]的助手,但获得nil背后的问题是,您需要在Ruby 中用一个:符号来表示它
我猜你已经习惯了在RubyonRails中使用Hash,它将Ruby附带的Hash
类子类化为HashWithIndifferentAccess
,而且你通常不会被迫(在Rails中(将其视为开发人员。还应该注意的是,Rails直接修改Ruby的基本Hash
类,因此在Rails中(或者,特别是在加载ActiveSupport时(实际上有更多的可用性。
然而,Ruby(纯(在散列中的键时不会乱来。这允许一些强大的应用程序——记住,Ruby中的一切都是一个Object。
因此,'string'
和:symbol
都是对象,而且是不同的对象。您甚至可以使用Class
作为哈希中的密钥。
{
Object => :object_symbol,
Class => :class_symbol
}
因此,当您试图访问哈希中某个键后面的值时,请确保使用确切的键本身。
在上面的示例中,您使用符号product
作为密钥。Ruby使用:
来表示。
{
product: 'A',
qty: 1
}
这相当于说
{
:product => 'A',
:qty => 1
}
所以你想称之为get_value = get_first_hash[:product]