无法从哈希中提取数据

时间:2018-11-20 15:40:05

标签: ruby hash

我有一个哈希数组:

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

我希望有人能告诉我这件事。

2 个答案:

答案 0 :(得分:2)

希望这足够!

array_hash.first[:product]

如果您只想第二个,

array_hash.second[:product]

此外,.first只是做array_hash [0]的助手,但是得到nil的问题是您需要在Ruby中用:symbol表示它。

答案 1 :(得分:1)

我猜你习惯在Ruby on Rails中使用Hash,该子类将Ruby附带的Hash类子类化为HashWithIndifferentAccess,而您通常从不强迫将其视为开发人员(在Rails中)。还应该注意的是,Rails directly modifies是Ruby的基类Hash,因此在Rails中(或者特别是在加载ActiveSupport时),您实际上有更多可用空间。

Ruby(纯),但是在散列中的键方面并没有摆弄。这样可以使用一些功能强大的应用程序-请记住,Ruby中的所有内容都是一个对象。

因此,'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]