Ruby 如何确定数组的维数?
我有一个使用转置的方法,但是如果数组小于2维,我不想应用这个操作。我想知道如何在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
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