2011-04-03 79 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]