ruby return 每个嵌套数组中存在的值数组
ruby return array of values that exist in every nested array
我想构建一个 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]
但不确定如何使该操作动态化。
您正在寻找 Enumerable#reduce
(aka #inject
) 方法。这对像数组这样的可枚举对象执行聚合计算。如果你不给它传递初始值,它会使用集合的第一个元素作为初始值。
arr.reduce { |a, b| a & b } # => [2]
对于这种类型的表达式,有一个方便的 shorthand:
[[1, 2, 3], [1, 2], [2]].reduce(:&) # => [2]
[[1, 2, 3], [1, 2, 4]].reduce(:&) # => [1, 2]
[[1], [2]].reduce(:&) # => []
[].reduce(:&) # => nil
我想构建一个 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]
但不确定如何使该操作动态化。
您正在寻找 Enumerable#reduce
(aka #inject
) 方法。这对像数组这样的可枚举对象执行聚合计算。如果你不给它传递初始值,它会使用集合的第一个元素作为初始值。
arr.reduce { |a, b| a & b } # => [2]
对于这种类型的表达式,有一个方便的 shorthand:
[[1, 2, 3], [1, 2], [2]].reduce(:&) # => [2]
[[1, 2, 3], [1, 2, 4]].reduce(:&) # => [1, 2]
[[1], [2]].reduce(:&) # => []
[].reduce(:&) # => nil