2017-11-25 51 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 
相关问题