class Array
def deep_array_count()
count = 0
each{|el|
#I could check with is_a?(Array), but with respond_to? you could use your own classes.
if el.respond_to?(:deep_array_count)
count += 1 + el.deep_array_count
end
}
count
end
end
x = [
[
[
["Array", "1"], ["Array", "2"] ],
[ ["Array", "3"], ["Array", "4"] ],
],
[
[ ["Array", "5"], ["Array", "6"] ],
[ ["Array", "7"], ["Array", "8"] ]
]
]
p x.deep_array_count
Результат в этом примере - 14, а не запрошенный 8. Я считаю каждый массив.
Чтобы получить 8, вы должны считать только массивы без другого массива.
class Array
def deep_array_count()
count = 0
each{|el|
#I could check with is_a?(Array), but with respond_to? you could use your own classes.
if el.respond_to?(:deep_array_count)
i = el.deep_array_count
count += i == 0 ? 1 : i #if no other array is inside, add 1
end
}
count
end
end
x = [
[
[
["Array", "1"], ["Array", "2"] ],
[ ["Array", "3"], ["Array", "4"] ],
],
[
[ ["Array", "5"], ["Array", "6"] ],
[ ["Array", "7"], ["Array", "8"] ]
]
]
p x.deep_array_count