遍历数组中深度嵌套的散列的问题
Issues iterating over deeply nested hash of hashes inside an array
所以,我的问题的快速模型看起来像这样......
`def problem
[{
'Hash1' => {
'Hash_1' => 'abcd',
'Hash_2' => 'abcd',
'Hash_3' => nil,
}
},
{
'Hash2' => {
'Hash_1' => 'efg',
'Hash_2' => 'efg',
'Hash_3' => 'efg'
}
},
{
'Hash3' => {
'Hash_1' => 'hijk',
'Hash_2' => nil,
'Hash_3' => 'hijk'
}
}]
end`
例如,我想使用 .each
方法在所有 3 个散列中为它的每个实例查找 Hash2
的值。
当我这样做时,我得到 return到处都是 Nil 值。作为一个附加问题,如果 hash2
有一个 nil
值,我想 return N/A
而不是 nil
。
problem.each do |item|
item.each do |thing|
thing.each do |other_thing|
puts other_thing['Hash1']
end
end
end
return以下是:
Hash1
abcd
efg
hijk
空格是 nil
个值。我超级难过。有人想尝试一下吗?
您正在 puts
未定义变量而没有进行任何条件检查
以上数据为例:
problem.each do |arr_item|
arr_item.each do |hash_key, hash|
if hash['Hash_2']
puts hash['Hash_2']
else
puts 'N/A'
end
end
end
arr = [{ 'Hash1'=>{ 'Hash_1'=>'abcd', 'Hash_2'=>'abcd', 'Hash_3'=>nil } },
{ 'Hash2'=>{ 'Hash_1'=>'efg', 'Hash_2'=>'efg', 'Hash_3'=>'efg' } },
{ 'Hash3'=>{ 'Hash_1'=>'hijk', 'Hash_2'=>nil, 'Hash_3'=>'hijk' } }
]
arr.map { |h| h.first.last["Hash_2"] || 'N/A' }
#=> ["abcd", "efg", "N/A"]
所以,我的问题的快速模型看起来像这样......
`def problem
[{
'Hash1' => {
'Hash_1' => 'abcd',
'Hash_2' => 'abcd',
'Hash_3' => nil,
}
},
{
'Hash2' => {
'Hash_1' => 'efg',
'Hash_2' => 'efg',
'Hash_3' => 'efg'
}
},
{
'Hash3' => {
'Hash_1' => 'hijk',
'Hash_2' => nil,
'Hash_3' => 'hijk'
}
}]
end`
例如,我想使用 .each
方法在所有 3 个散列中为它的每个实例查找 Hash2
的值。
当我这样做时,我得到 return到处都是 Nil 值。作为一个附加问题,如果 hash2
有一个 nil
值,我想 return N/A
而不是 nil
。
problem.each do |item|
item.each do |thing|
thing.each do |other_thing|
puts other_thing['Hash1']
end
end
end
return以下是:
Hash1
abcd
efg
hijk
空格是 nil
个值。我超级难过。有人想尝试一下吗?
您正在 puts
未定义变量而没有进行任何条件检查
以上数据为例:
problem.each do |arr_item|
arr_item.each do |hash_key, hash|
if hash['Hash_2']
puts hash['Hash_2']
else
puts 'N/A'
end
end
end
arr = [{ 'Hash1'=>{ 'Hash_1'=>'abcd', 'Hash_2'=>'abcd', 'Hash_3'=>nil } },
{ 'Hash2'=>{ 'Hash_1'=>'efg', 'Hash_2'=>'efg', 'Hash_3'=>'efg' } },
{ 'Hash3'=>{ 'Hash_1'=>'hijk', 'Hash_2'=>nil, 'Hash_3'=>'hijk' } }
]
arr.map { |h| h.first.last["Hash_2"] || 'N/A' }
#=> ["abcd", "efg", "N/A"]