循环遍历两个文件 Ruby

Jon*_*n_W 3 ruby loops file

同时迭代两个文件的最简洁方法是什么,以便如果 file_1 == 'x' 中的第 57 行则以这种方式处理 file_2 中的第 57 行?

我下面的代码不起作用,但我知道有一个简单的解决方案......

@blue = []
@red = []

file_1 = File.open('index.txt', 'r')
file_2 = File.open('index2.txt', 'r')

for item, line in file_1, file_2
   @blue << line if item == "blue"
   @red << line if item == "red"
end

file_1.close
file_2.close
Run Code Online (Sandbox Code Playgroud)

kid*_*ils 5

一次性读取整个文件并将其放入变量中绝不是一个好习惯。

对于您的问题,需要同时读取两个文件,我建议这样做(不需要任何空间开销):

@blue = []
@red = []
#make the files enumerable. 
file_1 = File.open('index.txt', 'r').to_enum
file_2 = File.open('index2.txt', 'r').to_enum

loop do
  #access next line in each file with .next
  item = file_1.next
  line = file_2.next
  @blue << line if item.eql?('blue')
  @red  << line if item.eql?('red')
end

file_1.close
file_2.close
Run Code Online (Sandbox Code Playgroud)

to_enum当在对象上调用时,使其可枚举并为其配备多个枚举器功能。#next是内置方法之一。

上面的代码从每个文件中逐行读取一行;一旦任何文件超出下一个输入,循环就会终止