在Ruby中同时处理两个文件

war*_*ker 1 ruby

我想读取两个文本文件,并同时处理它们,如下所示:

f1 = File.open(...)
f2 = File.open(...)

|f1, f2|.each do |l1,l2|
    ......
end
Run Code Online (Sandbox Code Playgroud)

我怎么能在Ruby中做到这一点?

And*_*imm 9

如何避免与matt的答案相关的记忆吮吸:

f1 = File.open(...)
f2 = File.open(...)

f1.each.zip(f2.each).each do |line1, line2|
  # Do something with the lines
end
Run Code Online (Sandbox Code Playgroud)

zip 是Enumerable中许多鲜为人知的方法之一,值得了解,特别是如果你对学习函数式编程范式感兴趣的话.

它避免了与matt的答案相关的内存吮吸,因为它不是读取所有内容,而是f1.each返回一个只能在需要时使用的枚举器.

  • 在一个紧凑的表达式中三个用于"each"的+1.值得一提的一个问题是:如果一个或另一个文件提前用完了(可以这么说 - 如果它更短),那么生成的压缩子数组将充满`nil`s,必须以某种方式测试或处理.然而,这个问题出现了你处理这个问题,但我认为这是值得说的. (2认同)