将嵌套数组或散列或ruby哈希添加到容器

时间:2015-08-05 19:01:02

标签: arrays ruby hash

我试图从嵌套哈希中获取值,并将其键存储到数组中,但我不能超过第一级。我知道该怎么做,但我仍然坚持如何从那里开始。

这是我的哈希值数组:

family = [{
    dad: "Tony",
    mum: "Claire",
    relatives: [{
      uncle: "Jack",
      aunt: "Lilian",
      grandparents: ["Blake", "Amy"]
     }]
}]

以下是我尝试过的方法:

array_a = []
array_b = []
array_c = []
array_d = []

def iterate_me(family)
  family.each do |member|
    if member.is_a?(Hash) || member.is_a?(Array)
      iterate_me(member)
    else
      #this below works
      array_a << member.fetch(:dad)
      array_b << member.fetch(:mum)

      #can't get this below to work
      array_c << member.fetch(:relatives: uncle or aunt) #add uncle or aunt to array
      array_d << member.fetch(:grandparents) #add blake, amy or both to array
    end
  end
end

另外,是否有一种更简单的方法或更像红宝石的方式来做到这一点?我大约4个月进入红宝石

1 个答案:

答案 0 :(得分:1)

您可以使用fetch方法(假设您事先知道哈希中的键),而不是使用递归来遍历数据结构和map

例如,要为array_a填充所有:dad条目,您可以执行此操作

array_a = family.map {|x| x[:dad] }

或祖父母

family.map {|x| x[:relatives].map { |x| x[:grandparents] }}