Going over two interators

I often find that I need to go over two enumerables in parallel. I have
used a little method called ‘both’ for this:

irb
arr1 = [1,2,3,4,5]
–> [1, 2, 3, 4, 5]
arr2 = [6,7,8,9,10]
–> [6, 7, 8, 9, 10]
def both( enum1, enum2 )
enumC = enum2.dup
enum1.each do |e1|
yield e1, enumC.shift
end
end
–> nil
both( arr1, arr2 ) do |a,b|
puts "#{a} : #{b}"
end
1 : 6
2 : 7
3 : 8
4 : 9
5 : 10
–> [1, 2, 3, 4, 5]

It assumes that enum1 is at least at big as enum2.

Is there a way someone can think of that’s more efficient then this?
Namely getting rid of the ‘dup’. Or maybe I’m missing some rubyism that
would make this easier.

TIA,
Michael

Michael Garriss wrote:

I often find that I need to go over two enumerables in parallel. I
have used a little method called ‘both’ for this:

irb
arr1 = [1,2,3,4,5]
→ [1, 2, 3, 4, 5]
arr2 = [6,7,8,9,10]
→ [6, 7, 8, 9, 10]
def both( enum1, enum2 )
enumC = enum2.dup
enum1.each do |e1|
yield e1, enumC.shift
end
end
→ nil
both( arr1, arr2 ) do |a,b|
puts “#{a} : #{b}”
end
1 : 6
2 : 7
3 : 8
4 : 9
5 : 10
→ [1, 2, 3, 4, 5]

It assumes that enum1 is at least at big as enum2.

Is there a way someone can think of that’s more efficient then this?
Namely getting rid of the ‘dup’. Or maybe I’m missing some rubyism
that would make this easier.

I just realized that a) my spell checker doesn’t look at the subject
line, and that b) this only works for arrays. How could I make it work
(well) for any enumerable?

Michael

Have a look at these:

http://www.rubycentral.com/faq/rubyfaq-5.html#ss5.5

http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/rough/lib/generator.rb?rev=1.6&content-type=text/x-cvsweb-markup
http://rgl.sourceforge.net/files/stream_rb.html

Paul

···

On Thu, Sep 18, 2003 at 08:23:59AM +0900, Michael Garriss wrote:

I often find that I need to go over two enumerables in parallel.

In Ruby 1.8, try Enumerable#zip.

-austin

···

On Thu, 18 Sep 2003 08:27:08 +0900, Michael Garriss wrote:


austin ziegler * austin@halostatue.ca * Toronto, ON, Canada
software designer * pragmatic programmer * 2003.09.17
* 21.58.04

Austin Ziegler wrote:

In Ruby 1.8, try Enumerable#zip.

That’s the one. Thanks to you and the lucky stiff…

Michael