From: Geert Fannes Date: 2005-06-02T17:27:50+09:00 Subject: Re: internal iterators in ruby Hello, the following code can iterate over any number of arrays and has both the each and collect method implemented. You find some example usage at the end of the code. Greetings, Geert Fannes. #begin code class GZipExc < Exception def initialize(problem="") @ExcStr||="A GZipExc occured" super(problem) end end class GZip include Enumerable def initialize(*arg) raise GZipExc.new("You cannot pass a block to GZip.new. Maybe you forgot .each or something.") if block_given? @arrays=Array.new @minLength=nil if TrueClass===arg.first arg.shift arg.each do |a| a=a.dup if @arrays.include?(a) @arrays.push(a) if @minLength @minLength=a.length if a.length<@minLength else @minLength=a.length end end else arg.each do |a| a=a.dup if @arrays.include?(a) @arrays.push(a) if @minLength raise GZipExc.new("Different lengths found: #{@minLength} != #{a.length}.") if a.length!=@minLength else @minLength=a.length end end end end def GZip.minLen(*arg) new(true,*arg) end def each (0...@minLength).each {|i| yield(@arrays.collect {|a| a[i]})} end def each_with_index (0...@minLength).each {|i| yield((@arrays.collect {|a| a[i]}) << i)} end def all? bOK=true (0...@minLength).each do |i| if !yield(@arrays.collect {|a| a[i]}) bOK=false break end end return bOK end def delete_if ix=0 (0...@minLength).each do |i| if yield(@arrays.collect {|a| a[ix]}) @arrays.each{|a| a.delete_at(ix)} else ix+=1 end end return self end end if $0==__FILE__ a=[1,2,3] b=[4,5,6] c=[7,8,9] GZip.new(a,b,c).each do |aa,bb,cc| print aa,bb,cc,"\n" end b.push(7) begin GZip.new(a,b).each do |aa,bb| print aa,bb,"\n" end rescue GZipExc puts "I rescued the exception" else puts "ERROR::i did not catch the expected exception" end GZip.minLen(a,b).each do |aa,bb| print aa,bb,"\n" end b.pop d=GZip.new(a,b,c).collect do |aa,bb,cc| [aa,bb,cc] end d.each do |dd| puts dd.join(' ') end end #end code -----Original Message----- From: Navya Amerineni [mailto:navyaamerineni@yahoo.com] Sent: 02 June 2005 05:39 To: ruby-talk ML Subject: internal iterators in ruby Hi, I read that it is difficult to iterate over two collections in paralell using ruby's internal iterators. can any one explain me indetail why it is so.. thanks in advance Navya __________________________________ Discover Yahoo! Get on-the-go sports scores, stock quotes, news and more. Check it out! http://discover.yahoo.com/mobile.html