mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Add Enumerable#zip
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user