2011-04-03 100 views
0

在紅寶石1.8.x的,我們遍歷多個可枚舉這樣的:syncEnumerator相當於紅寶石1.9.2

require 'generator' 
syncEnum = SyncEnumerator.new(enum1, enum2) 
syncEnum.each { |x;y| puts "#{x},#{y}" } 

但發電機已經在Ruby 1.9.x的去除,多個枚舉如何Iiterate在Ruby 1.9中。X?

感謝

回答

3

SyncEnumerator似乎被轉移到REXML模塊:

require 'rexml/syncenumerator' 
a = [1,2,3] 
b = [4,5,6] 
e = REXML::SyncEnumerator.new(a, b) 
e.each{|i,j| p [i, j]} 
#=> [1, 4] 
#=> [2, 5] 
#=> [3, 6] 

順便說一句,只是爲了實踐,這裏有一個天真的實現:

def sync_enum *enums 
    enums.map!(&:to_enum) 
    Enumerator.new do |yielder| 
    loop do 
     yielder.yield(enums.map(&:next)) 
    end 
    end 
end 
0

我使用Zucker gem用於此目的。它使用有用的合成糖來擴展Ruby。

require 'zucker/control' 
a = [1,2,3] 
b = [4,5,6] 
iterate(a, b) { |i,j| p [i, j] } 
#=> [1, 4] 
#=> [2, 5] 
#=> [3, 6]