收集所有不使用Ruby

时间:2009-12-01 23:21:25

标签: ruby arrays

我有一小段代码。

我不知道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) ..但似乎没有用。

3 个答案:

答案 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}
}

创建数字数组。