2012-03-05 12 views
3

配列内の配列数を計算するアルゴリズムが見つからないようです。例私はあなたがあれば1を返す再帰関数を使用することを示唆している出力がRubyで配列内の配列数を数えるには?

[ 
    [ 
     [ ["Array", "1"], ["Array", "2"] ], 
     [ ["Array", "3"], ["Array", "4"] ], 
    ], 
    [ 
     [ ["Array", "5"], ["Array", "6"] ], 
     [ ["Array", "7"], ["Array", "8"] ] 
    ] 
]` 

与えられた出力は8

+1

どのように '[[[[ "編曲"、 "1"]、[ "編曲"、 "2" について]、[["Arr"、 "3"]]]、[["Arr"、 "4"]、["Arr"、 "5"]]] '? –

答えて

4

この再帰関数は、任意のネストの配列のために仕事を行います。

def count_subarrays array 
    return 0 unless array && array.is_a?(Array) 

    nested = array.select { |e| e.is_a?(Array) } 
    if nested.empty? 
    1 # this is a leaf 
    else 
    nested.inject(0) { |sum, ary| sum + count_subarrays(ary) } 
    end 
end 
0

あるべき2

でなければなりません

[ [ "Array", "1" ], [ "Array", "2" ] ] 

考える

引数はリーフ配列です。例: (if SaaS型コースの練習のように各アレイ内の2人の子供)

def array?(entity) 
    entity[0].kind_of?(Array) ? array?(entity[0]) + array?(entity[1]) : 1 
end 
+1

メソッド名の選択は非常に疑問です。特に '?'で終わるので(通常はブール値を返します)、数値を返します。 –

+0

さらに、これは、両方の配列である正確に2つの要素以外がある場合、または最初の要素が配列ではない場合を考慮していません。 –

0
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 

この例の結果は8 要求された私は、各配列を数えるあなたのない、14であるがあります。

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 
関連する問題