Mike Hall wrote: > 1. A new method, Array.combine (needs a better name for general use). > It takes entries from two (or many) arrays and combines them. > (like a combination of Array.zip, fetch, and map) Following on my suggestion that combine is just an extension of map, how do you feel about this code?: class Array alias :__map :map def map *args, &block identity = proc{ |*items| items.length==1 ? items[0] : items } self.zip(*args).__map{ |line| (block or identity).call *line } end alias :collect :map end irb(main):003:0> [1,2,3].map => [1, 2, 3] irb(main):004:0> [1,2,3].map [1,3,5] => [[1, 1], [2, 3], [3, 5]] irb(main):005:0> [1,2,3].map([1,3,5]){|x,y|x*y} => [1, 6, 15]