Ruby 如何确定数组的维数?

Ruby 如何确定数组的维数?,ruby,Ruby,我有一个使用转置的方法,但是如果数组小于2维,我不想应用这个操作。我想知道如何在ruby中实现这一点 so for an array like [1,2] -> it should say 1D and for an array like [[1,2],[1,2]] it should say 2D 感谢您的帮助 Ted因为Ruby数组可以容纳任何东西,这是脆弱的,充其量只是一种攻击,但您可以随时检查第n个元素是否是数组,即 def is_2d(array) array.first

我有一个使用转置的方法,但是如果数组小于2维,我不想应用这个操作。我想知道如何在ruby中实现这一点

so for an array like [1,2] -> it should say 1D

and for an array like [[1,2],[1,2]] it should say 2D
感谢您的帮助


Ted

因为Ruby数组可以容纳任何东西,这是脆弱的,充其量只是一种攻击,但您可以随时检查第n个元素是否是数组,即

def is_2d(array)
  array.first.is_a?(Array)
end

我真的不喜欢这样,所以如果有更好的事情,就扇我一耳光或者让我忘记。

你可以递归地找到它:

def getDimension(array)
  if array.first.is_a?(Array)
    1 + getDimension(array.first)
  else
    1
  end
end

我知道这有点粗糙,可能有人能把它做得更好,但总的想法很清楚。

嗯,我可以试试转置和拯救索引器,TypeError,但另一个想法是:

x.map(&:class).uniq == [Array]
怎么样

a.map{|e| e.is_a?(Array)}.uniq == [true] ? "#{e.size}D" : "1D"
这是假设您使用的是普通的ruby数组,而不是
Matrix
es。
如果阵列不规则,您可能会遇到更糟糕的数据模型问题,因此这两种方法中的一种可能就足够了。

不要担心错误,只需预测它们:

a.transpose rescue a

如果维度数量不一致,该怎么办?
a.transpose rescue a