0

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

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

family[0]["Homer"]

我收到一个错误,上面写着

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

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

4

3 回答 3

8

你应该试试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"]which 会给你价值1

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

于 2013-09-24T14:30:45.597 回答
1

您实际上没有散列数组。您有一组哈希数组。

您的错误发生是因为您取消引用了您的结构,[0]该结构为您提供了第一个哈希数组,现在您尝试访问'homer'不存在的键,因为数组以整数为键。

这是一个如何查看所有值的示例,看看您是否可以'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

输出:

荷马 => 1

玛吉 => 2

丽莎 => 3

玛姬 => 4

安倍 => 5

圣诞老人的小帮手 => 6

荷马 => 2

玛吉 => 4

丽莎 => 6

玛姬 => 8

安倍 => 10

圣诞老人的小帮手 => 12

于 2013-09-24T14:37:50.683 回答
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
          } 
     ]
于 2013-09-24T14:40:08.833 回答