2017-11-25 8 views
1

すべてのネストされた配列の共通要素を見つけるルビ関数を作成したいと思います。たとえば、次の配列を考えると、これはと...ruby​​すべてのネストされた配列に存在する値の配列

[[1, 2, 3], [1, 2], [2]] 
=> [2] 

[[1, 2, 3], [1, 2, 4]] 
=> [1, 2] 

私は何ができるまで来ると答え、

arr = [[1, 2, 3], [1, 2], [2]] 
arr[0] & arr[1] & arr[2] 
=> [2] 

しかし、その操作を動的にする方法がわかりません。

答えて

4

あなたはEnumerable#reduce(別名#inject)メソッドを探しています。これは、配列のような列挙型に対する集計計算を実行します。初期値を渡さないと、コレクションの最初の要素が初期値として使用されます。

arr.reduce { |a, b| a & b } # => [2] 

と表現のこのタイプのための便利な速記があります:

[[1, 2, 3], [1, 2], [2]].reduce(:&) # => [2] 
[[1, 2, 3], [1, 2, 4]].reduce(:&) # => [1, 2] 
[[1], [2]].reduce(:&)    # => [] 
[].reduce(:&)      # => nil 
関連する問題