Loop over multiple arrays simultaneously

From Rosetta Code
Revision as of 18:42, 6 August 2009 by rosettacode>Spoon!
Task
Loop over multiple arrays simultaneously
You are encouraged to solve this task according to the task description, using any language you may know.

Loop over multiple arrays (or lists or tuples ...) and print the ith element of each. Use your language's "for each" loop if it has one, otherwise iterate through the collection in order with some other loop.

Example, loop over the arrays (a,b,c), (A,B,C) and (1,2,3) to produce the output

aA1
bB2
cC3

If possible, also describe what happens when the arrays are of different lengths.

Common Lisp

<lang lisp>(mapc (lambda (&rest args)

       (format t "~{~A~}~%" args))
     '(|a| |b| |c|)
     '(a b c)
     '(1 2 3))</lang>

If lists are different lengths, it stops after the shortest one.

J

   (,.":"0)&:>/ 'abc' ; 'ABC' ; 1 2 3

Python

Using zip(): <lang python>>>> print ( '\n'.join(.join(x) for x in zip('abc', 'ABC', '123')) ) aA1 bB2 cC3 >>> </lang> If lists are different lengths, zip() stops after the shortest one.

Using map(): <lang python>>>> print ( '\n'.join(map(lambda *x: .join(x), 'abc', 'ABC', '123')) ) aA1 bB2 cC3 >>> </lang> If lists are different lengths, map() pretends that the shorter lists were extended with None items.

Ruby

<lang ruby>['a','b','c'].zip(['A','B','C'], [1,2,3]).each {|i,j,k| puts "#{i}#{j}#{k}"}</lang> or <lang ruby>['a','b','c'].zip(['A','B','C'], [1,2,3]).each {|a| puts a.join()}</lang> If lists are different lengths, .zip() stops at the end of the object it is called on (the first list). If any other list is shorter, it pretends that they were extended with nil items.

Tcl

<lang tcl>foreach i {a b c} j {A B C} k {1 2 3} {

   puts "$i$j$k"

}</lang>