同时迭代两个文件的最简洁方法是什么,以便如果 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)
一次性读取整个文件并将其放入变量中绝不是一个好习惯。
对于您的问题,需要同时读取两个文件,我建议这样做(不需要任何空间开销):
@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是内置方法之一。
上面的代码从每个文件中逐行读取一行;一旦任何文件超出下一个输入,循环就会终止。