这是我在任务中遇到的问题。
我不知道如何确定阵列A的深度。例如:
arrA = [
[
[1,2]
]
]
我测试过:A[0][0][0] == nil
,返回false
。此外,A[0][0]..[0] == nil
始终返回false
。所以,我无法通过这种方式知道数组A的深度。
答案 0 :(得分:9)
如果这不是你想要的,那应该是一个很好的起点:
def depth (a)
return 0 unless a.is_a?(Array)
return 1 + depth(a[0])
end
> depth(arrA)
=> 3
请注意,这仅测量第一个分支的深度。
答案 1 :(得分:5)
我的解决方案在下面回答了任何阵列的最大深度:
示例:对于arr = [ [[1],[2,3]], [[[ 3,4]]]],最大深度为arr <3,4> 4 。
Aprroach - 压平一级并进行比较
b, depth = arr.dup, 1
until b==arr.flatten
depth+=1
b=b.flatten(1)
end
puts "Array depth: #{depth}" #=> 4
希望它能回答你的问题。
答案 2 :(得分:0)
这里有一个类似于kiddorails' solution的单行提取到方法中:
def depth(array)
array.to_a == array.flatten(1) ? 1 : depth(array.flatten(1)) + 1
end
它会使阵列1的尺寸变平,直到它不再变平,同时计算尺寸。
为什么这比其他解决方案更好?
is_a?
,send
,respond_to?
等。)array.to_a
)