Ruby 文件中的整数数组
我试图从文件中获取大量数字,将它们存储为数组,然后将它们相加Ruby 文件中的整数数组,ruby,string,int,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 b
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)
我检查以确保每个数组元素中都包含正确的数据。我认为这些数字在存储时被认为是字符串。如果是这种情况,我如何将数组更改为整数,以便将它们相加?只需修改即可
nums[x] = file.readline
到
干杯 您可以在打开的文件上逐行迭代:
total = File.open("inputfile.txt").inject(0) { |sum, line| sum + line.to_i }
另请参见squiguy评论中的示例,使用map
和reduce
以下是我的做法:
total = 0
File.foreach("inputfile.txt") { |li| total += li.to_i }
puts total
在内存中存储一个大数组不是一个好主意,因为您可以在代码计算和之前填充可用内存。相反,逐行读取文件,并边走边计算
基准测试表明,逐行I/O的速度与将整个文件读入内存,然后尝试将其作为单行处理一样快,因此请使用更保守的
IO.foreach
或ios.each.\u行
以避免不必要地填充内存。如果文件包含所有数字,我可以这样做:put IO.readlines(“inputfile.txt”).map(&:to_i).reduce(:+)
。有趣的。。。我本以为是File.open(“inputfile.txt”).read\u lines.inject(0)
,但我想read\u lines
是隐含的?@AlexanderWallaceMatchneer问得好,但我不会这样描述read_lines
读取整个文件并为您提供一个数据结构,即每行的数组。相比之下,open
提供了一个文件实例,可以逐行访问。这就是为什么它可以直接通过管道传输到inject中,而无需创建庞大的数据结构(所有行的数组)。
total = 0
File.foreach("inputfile.txt") { |li| total += li.to_i }
puts total