我试图从嵌套哈希中获取值,并将其键存储到数组中,但我不能超过第一级。我知道该怎么做,但我仍然坚持如何从那里开始。
这是我的哈希值数组:
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个月进入红宝石
答案 0 :(得分:1)
您可以使用fetch
方法(假设您事先知道哈希中的键),而不是使用递归来遍历数据结构和map
。
例如,要为array_a
填充所有:dad
条目,您可以执行此操作
array_a = family.map {|x| x[:dad] }
或祖父母
family.map {|x| x[:relatives].map { |x| x[:grandparents] }}