我想获取未嵌套到数组中的每个键的值。
lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}
def list_to_array(h)
result = []
h.each_value {|value|
value.is_a?(Hash) ? list_to_array(value) :
result << value
}
result
end
p list_to_array(lists)
你能告诉我我做错了吗?
想要输出[1,2,3],但我得到[1]
答案 0 :(得分:2)
在您的解决方案中,内部list_to_array
方法调用不会更新当前结果数组,因此无法正确更新。
我已经重构了一些东西,以使其更具可读性并排除零值
lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}
def list_to_array(h, results = [])
h.each_value do |value|
if value.is_a?(Hash)
list_to_array(value, results)
else
results << value unless value.nil?
end
end
results
end
p list_to_array(lists)
=> [1, 2, 3]