class Array
a method # that walks an array in groups, pass a block to call the block on each sub array
Public Instance Methods
in_groups_of(chunk_size, padded_with=nil) { |a| ... }
click to toggle source
# File lib/mcollective/monkey_patches.rb 29 def in_groups_of(chunk_size, padded_with=nil, &block) 30 arr = self.clone 31 32 # how many to add 33 padding = chunk_size - (arr.size % chunk_size) 34 35 # pad at the end 36 arr.concat([padded_with] * padding) unless padding == chunk_size 37 38 # how many chunks we'll make 39 count = arr.size / chunk_size 40 41 # make that many arrays 42 result = [] 43 count.times {|s| result << arr[s * chunk_size, chunk_size]} 44 45 if block_given? 46 result.each_with_index do |a, i| 47 case block.arity 48 when 1 49 yield(a) 50 when 2 51 yield(a, (i == result.size - 1)) 52 else 53 raise "Expected 1 or 2 arguments, got #{block.arity}" 54 end 55 end 56 else 57 result 58 end 59 end