访问哈希数组

时间:2013-09-24 14:28:05

标签: ruby arrays hash

我正在尝试从哈希数组中访问一个值。示例数组如下所示:

family = [
            [
              { "Homer" => 1, "Marge" => 2, "Lisa" => 3, "Maggie" => 4, 
                "Abe" => 5, "Santa's Little Helper" => 6
              }
            ], 
            [
              { "Homer" => 2, "Marge" => 4, "Lisa" => 6,           
                "Maggie" => 8, "Abe" => 10, "Santa's Little Helper" => 12
              }
            ] 
         ]

如果我尝试使用下面的语句访问数组索引"Homer"0)中的键family[0]的哈希值,并希望获得值1:< / p>

family[0]["Homer"]

我收到错误消息

"test.rb:4:in `[]': can't convert String into Integer (TypeError)"

关于如何能够在一个简单的语句中访问此类数组中的哈希值的任何建议?

3 个答案:

答案 0 :(得分:7)

您应该尝试family[0][0]["Homer"]

在你的情况下family[0]给你:

[{ "Homer" => 1, "Marge" => 2, "Lisa" => 3, "Maggie" => 4, "Abe" => 5,"Santa Little Helper" => 6}]

这是一个数组。您想要的哈希在其中,可以使用family[0][0]

{ "Homer" => 1, "Marge" => 2, "Lisa" => 3, "Maggie" => 4, "Abe" => 5,"Santa Little Helper" => 6}

因此,您现在可以使用family[0][0]["Homer"],它会为您提供值1

数组索引始终是数值。如果您收到can't convert String into Integer (TypeError)错误消息,则会引发异常,因为您尝试使用无法转换为整数的字符串来访问数组元素。

答案 1 :(得分:1)

你实际上没有哈希数组。你有一组哈希数组。

您的错误发生是因为您使用[0]取消引用您的结构,它为您提供了第一个哈希值,现在您尝试访问不存在的键'homer',因为< em> arrays 由整数键控。

以下是如何查看所有值的示例,看看您是否可以自己获取'homer'

family.each do |a|   # this is an array of arrays of hashes
  a.each do |h|      # this is an array of hashes
     h.each do |k,v| # this is a hash
       puts "#{k} => #{v}"
     end
  end
end

输出:

  

荷马=&gt; 1

     

Marge =&gt; 2

     

Lisa =&gt; 3

     

Maggie =&gt; 4

     

Abe =&gt; 5

     

圣诞老人的小助手=&gt; 6

     

荷马=&gt; 2

     

Marge =&gt; 4

     

Lisa =&gt; 6

     

Maggie =&gt; 8

     

Abe =&gt; 10

     

圣诞老人的小助手=&gt; 12

答案 2 :(得分:1)

@Arup Rakshit对于如何获得价值绝对正确。但是你也应该知道你没有哈希数组,你有一个数组数组,那些子数组包含哈希。根据你的标题,我得出的结论是你可能想要一个更像

的结构
family = [
          { "Homer" => 1, "Marge" => 2, "Lisa" => 3, "Maggie" => 4, 
            "Abe" => 5, "Santa's Little Helper" => 6
          }, 
          { "Homer" => 2, "Marge" => 4, "Lisa" => 6,           
            "Maggie" => 8, "Abe" => 10, "Santa's Little Helper" => 12
          } 
     ]