Can someone explain how this function works pls ? i didnt get this code : nums.map { |n| factors(n) }.inject(:&)

Viewed 52
def factors(num)
  (1..num).select { |i| num % i == 0}
end


def mutual_factors(*nums)
  nums.map { |n| factors(n) }.inject(:&)
end

I cant understand this part nums.map { |n| factors(n) }.inject(:&)

1 Answers

nums.map { |n| factors(n) } returns an array of factors for each element in nums.

.inject(:&) calculates the intersection (common elements) between each array of factors.

For example,

irb(main):013:0> [2,4,10].map {|n| factors(n)}
=> [[1, 2], [1, 2, 4], [1, 2, 5, 10]]
irb(main):014:0> [[1, 2], [1, 2, 4], [1, 2, 5, 10]].inject(:&)
=> [1, 2]
Related