ruby返回每个嵌套数组中存在的值数组

时间:2017-11-25 17:48:01

标签: arrays ruby metaprogramming

我想构建一个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]

但不确定如何使该操作动态化。

1 个答案:

答案 0 :(得分: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