Commit 68695d17 authored by Jun Hiroe's avatar Jun Hiroe

Add Enumerable#zip

parent 70718d59
......@@ -615,4 +615,34 @@ module Enumerable
end
nil
end
##
# call-seq:
# enum.zip(arg, ...) -> an_array_of_array
#
# Takes one element from <i>enum</i> and merges corresponding
# elements from each <i>args</i>. This generates a sequence of
# <em>n</em>-element arrays, where <em>n</em> is one more than the
# count of arguments. The length of the resulting sequence will be
# <code>enum#size</code>. If the size of any argument is less than
# <code>enum#size</code>, <code>nil</code> values are supplied.
#
def zip(*arg)
ary = []
i = 0
self.each do |val|
a = []
a.push(val)
idx = 0
while idx < arg.size
a2 = arg[idx].to_a
a.push(a2[i])
idx += 1
end
ary.push(a)
i += 1
end
ary
end
end
......@@ -135,3 +135,12 @@ assert("Enumerable#find_index") do
assert_equal 34, (1..100).find_index { |i| i % 5 == 0 and i % 7 == 0 }
assert_equal 49 ,(1..100).find_index(50)
end
assert("Enumerable#zip") do
a = [ 4, 5, 6 ]
b = [ 7, 8, 9 ]
assert_equal [[4, 7], [5, 8], [6, 9]], a.zip(b)
assert_equal [[1, 4, 7], [2, 5, 8], [3, 6, 9]], [1, 2, 3].zip(a, b)
assert_equal [[1, 4, 7], [2, 5, 8]], [1, 2].zip(a, b)
assert_equal [[4, 1, 8], [5, 2, nil], [6, nil, nil]], a.zip([1, 2], [8])
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment