2017-11-25 130 views
1

我想構建一個ruby函數來查找所有嵌套數組的通用元素。例如,給出下面的陣列,這就是答案會拿出...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