我需要一个函数来检查一个数组是否包含其他数组,或者更普遍的说,是否包含某个类。我的朴素方法是:
found=false
[1,"a",[],:asdf].each { |x| found=(x.is_a? Array) ? true : found }
puts found
有没有优化的方法?
我需要一个函数来检查一个数组是否包含其他数组,或者更普遍的说,是否包含某个类。我的朴素方法是:
found=false
[1,"a",[],:asdf].each { |x| found=(x.is_a? Array) ? true : found }
puts found
any?
。该链接指向最新的文档,其中有一个类似的示例检查整数。[1, "a", [], :asdf].any?(Array)
# => true
[1, "a", :asdf].any?(Array)
# => false
如果您的Ruby版本允许,那么这似乎是最简单的语法和最明智的方法 :)
each
时,你会发现缺少一些更高级的抽象。Array#any?
,如果数组中的任何元素满足谓词,它将返回true
:[1, "a", [], :asdf].any?(Array)
found = false
[1,"a",[],:asdf].each do |x|
if x.is_a? Array
found = true
break
end
end
puts found
found = [1,"a",[],:asdf].any? { |x| x.is_a? Array }
puts found # true