我试图从文件中获取大数字,将它们存储为数组,然后将它们添加起来。
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)
我检查过以确保每个数组元素中都包含正确的数据。我认为这些数字在存储时被视为字符串。如果是这种情况,我如何将数组更改为整数,以便我可以将它们合计?
答案 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评论中的示例,使用map
和reduce
。
答案 2 :(得分:1)
我是这样做的:
total = 0
File.foreach("inputfile.txt") { |li| total += li.to_i }
puts total
在内存中存储大型数组不是一个好主意,因为您可以在代码计算总和之前填充可用内存。相反,逐行读取文件并随时计算。
基准测试显示,逐行I / O与将整个文件读入内存然后尝试将其作为单行处理一样快,因此请使用更保守的IO.foreach
或ios.each_line
避免不必要地填补记忆。