文件中的整数数组

时间:2013-05-22 02:04:33

标签: ruby string int

我试图从文件中获取大数字,将它们存储为数组,然后将它们添加起来。

nums = Array.new
x, total=0, 0
file = File.open("inputfile.txt", 'r')
while !file.eof?
  nums[x] = file.readline
  x+=1
end

while x>0
  x-=1
  total += nums[x]
end

puts total

当我的代码执行时,我收到一条错误消息:

String can't be coerced into Fixnum (TypeError)

我检查过以确保每个数组元素中都包含正确的数据。我认为这些数字在存储时被视为字符串。如果是这种情况,我如何将数组更改为整数,以便我可以将它们合计?

3 个答案:

答案 0 :(得分:4)

只需修改

nums[x] = file.readline

nums[x] = file.readline.to_i

干杯!

答案 1 :(得分:1)

您可以在已打开的文件上逐行迭代:

total = File.open("inputfile.txt").inject(0) { |sum, line| sum + line.to_i }

另请参阅squiguy评论中的示例,使用mapreduce

答案 2 :(得分:1)

我是这样做的:

total = 0
File.foreach("inputfile.txt") { |li| total += li.to_i }
puts total

在内存中存储大型数组不是一个好主意,因为您可以在代码计算总和之前填充可用内存。相反,逐行读取文件并随时计算。

基准测试显示,逐行I / O与将整个文件读入内存然后尝试将其作为单行处理一样快,因此请使用更保守的IO.foreachios.each_line避免不必要地填补记忆。