"1", "children" => [{"id"=>"11", "chil-6ren">
gpt4 book ai didi

ruby - 在 Ruby 中返回嵌套哈希的最大深度的任何好方法

转载 作者:行者123 更新时间:2023-12-02 03:43:40 25 4
gpt4 key购买 nike

Hash 对象如下所示,它同时具有数组和散列值,但嵌套总是发生在“children”数组的值处:

a = {"id" => "1", "children" => [{"id"=>"11", "children"=>[{"id"=>"111"}]}, {"id"=>"12", "children"=>[{"id"=>"121", "children"=>[{"id"=>"1211"}]}, {"id"=>"122"}]}]}
a.max_depth = 3

最佳答案

以下(非递归)实例方法 Hash#depth 返回所需的深度度量。我添加了一个 puts 语句来显示中间计算。

class Hash
def depth
arr = values
d = 0
loop do
arr = arr.flatten.select { |e| e.is_a? Hash }
break d if arr.empty?
d += 1
arr = arr.map(&:values)
puts "d = #{d}, arr = #{arr}"
end
end
end

a.depth
d = 1, arr = [["11", [{"id"=>"111"}]], ["12", [{"id"=>"121", "children"=>
[{"id"=>"1211"}]}, {"id"=>"122"}]]]
d = 2, arr = [["111"], ["121", [{"id"=>"1211"}]], ["122"]]
d = 3, arr = [["1211"]]
#=> 3

关于ruby - 在 Ruby 中返回嵌套哈希的最大深度的任何好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com