Ruby:如何知道多维数组的深度

hqt*_*hqt 2 ruby arrays multidimensional-array

这是我在任务中遇到的问题.

  • 数组A有两个元素:数组B和数组C.
  • 数组B有两个元素:数组D和数组E.
  • 在某些时候,数组X只包含两个元素:字符串a和字符串b.

我不知道如何确定阵列A的深度.例如:

arrA = [
         [
           [1,2]
         ]
       ]
Run Code Online (Sandbox Code Playgroud)

我测试过:A[0][0][0] == nil返回false.而且,A[0][0]..[0] == nil总是回归false.所以,我无法通过这种方式知道数组A的深度.

alf*_*alf 9

如果这不是你想要的,那应该是一个很好的起点:

def depth (a)
  return 0 unless a.is_a?(Array)
  return 1 + depth(a[0])
end

> depth(arrA)
=> 3
Run Code Online (Sandbox Code Playgroud)

请注意,这仅测量第一个分支的深度.


kid*_*ils 5

我的解决方案在下面回答了任何数组的最大深度:

示例:对于arr = [ [[1],[2,3]],[[[ 3,4]]]],对于3,4 ,arr的最大深度为4.

Aprroach - 压平一层并进行比较

b, depth = arr.dup, 1

until b==arr.flatten
  depth+=1
  b=b.flatten(1)
end
puts "Array depth: #{depth}" #=> 4
Run Code Online (Sandbox Code Playgroud)

希望它能回答你的问题.