哈希树深度Ruby



我应该编写一个方法,该方法以嵌套的哈希作为输入,并返回该哈希并添加"深度";键。例如,以下输入:

tree = { 
a: 1,
b: 2, 
c: { d: { e: 3 } }
}

将产生以下返回值:

{
a: 1,
b: 2,
c: {
d: {
e: 3,
depth: 2
},
depth: 1
},
depth: 0
}

如果输入不是散列,那么函数应该返回nil。

这就是我想到的:

def depth(hash)
num = 0
hash.each do |key, value|
if value.class == Hash
num += 1
v[:depth] = num
value.each do |k, v|
if v.class == Hash
num += 1
v[:depth] = num
v.each do |ky, val|
if val.class == Hash
num += 1
v[:depth] = num
val.each do |ke, vl|
if vl.class == Hash
num += 1
v[:depth] = num
end
end
end
end
end
end
end
num = 0
end
end

但它被限制为哈希深度4,我不能一直把这个方法做得更大。

试试这个。

def depth(h, i=0)
h.each_with_object(depth: i) { |(k,v),g| g[k] = v.is_a?(Hash) ? depth(v, i+1) : v }
end
depth { a: 1, b: 2, c: { d: { e: 3 } }
#=> {:depth=>0, :a=>1, :b=>2, :c=>{:depth=>1, :d=>{:depth=>2, :e=>3}}}

最新更新