我有一小段代码。
我不知道ruby,我认为这是一个应用它的好机会。
我想打印文件e
中不在文件c
中的所有行。每一行都是一个数字。
这就是我所拥有的:
e = File.new('e').readlines
c = File.new('c').readlines
x = e.collect do |item|
c.include?( item ) ? "" : item
end
p x.sort
问题是这两个文件可能都有空格,因此可能不会将相同的数字视为空格。 (例如,“1234”与“1234”不同)
我的代码中需要什么来修复它?我试过c.include?(item.strip)
..但似乎没有用。
答案 0 :(得分:3)
当你执行strip
时,或许做readlines
会有所帮助,即
e = File.readlines('e').map{|x| x.strip}
c = File.readlines('c').map{|x| x.strip}
然后你可以像你一样使用collect
,或者如果你不想要空字符串,可以使用select
:
x = e.select{|i| !c.include?(i)}
修改:或Benno建议使用
x = e-c
答案 1 :(得分:3)
两件事:
File.readlines("e").map(&:to_i) - File.readlines("c").map(&:to_i)
答案 2 :(得分:1)
您可以将项目转换为实际数字。此外,您应该在阅读后关闭这些文件。 File.new打开但不关闭。您可以在一个块中打开它以自动关闭它。尝试:
e = nil
c = nil
File.open('e'){|file|
e = file.readlines
e.map!{|x| x.to_i}
}
File.open('c'){|file|
c = file.readlines
c.map!{|x| x.to_i}
}
创建数字数组。