【发布时间】:2015-09-26 20:19:23
【问题描述】:
我只是想知道是否还有其他解决问题的好方法,如下所示:
p [1,[2,3,"hi",[[[[2,"ex","bye"]]]]]].count_type(String)
# => 3
所以我们的目标是计算多维数组中的类型,但正如我所说,像这样的问题,不仅仅是这个问题。一般的问题是我们得到多维数组,然后我们需要搜索最小索引为 2 或其他条件的类型或数组。对于我的语言使用不当,我深表歉意,希望您明白这一点。
我知道递归方法有效。但是有没有其他的递归或非递归实现方式?
我使用以下:
def count_type(type)
counter = 0
self.each { |elem|
if elem.is_a?(type)
counter +=1
end
if elem.is_a?(Array)
counter += elem.method(type)
end
}
end
return counter
我知道elem.is_a?(type) 的部分有所不同,具体取决于您的要求。
我忘了告诉你,禁止使用 flatten,我的目标不是向类 Array 添加新方法,而是学习解决上述问题的新方法。
【问题讨论】:
-
我不得不修正你的缩进,因为你在那里做的事情非常混乱。现在很明显发生了一些奇怪的事情。不过,
method方法不应该用于此目的。 -
对于只是类型检查问题,您可以使用这一个班轮。您不需要覆盖 Array 类
[1,[2,3,"hi",[[[[2,"ex","bye"]]]]]].flatten.select{|elem| elem.is_a?(String)}.count
标签: arrays ruby recursion multidimensional-array