Method: Enumerable#modulate

Defined in:
lib/core/facets/enumerable/modulate.rb

#modulate(modulo) ⇒ Object

Divide an array into groups by modulo of the index.

[2,4,6,8].modulate(2)  #=> [[2,6],[4,8]]

CREDIT: Trans

NOTE: Would the better name for this be ‘collate’?

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
19
# File 'lib/core/facets/enumerable/modulate.rb', line 11

def modulate(modulo)
  return to_a if modulo == 1
  raise ArgumentError, 'bad modulo' if size % modulo != 0
  r = Array.new(modulo, [])
  (0...size).each do |i|
    r[i % modulo] += [self[i]]
  end
  r
end