Mapping two (or more) arrays in parallel

my approach

# 1
itr_bolt = bolts.to_enum
p nuts.map{|nut|assemble nut, itr_bolt.next}

# 2
def parallel(*enums)
  return to_enum(__callee__, *enums) unless block_given?
  itrs = enums.map(&:to_enum)

  begin
    loop do
      yield(* itrs.map(&:next))
    end
  rescue StopIteration
    self
  end
end

p parallel(nuts, bolts).map{|nut, bolt|assemble nut, bolt}

# 3
p [].tap{|r|
  nuts.zip(bolts){|tuple|r << assemble(*tuple)}
}

# run

···

--
Posted via http://www.ruby-forum.com/.