将数组内容转换为整数

6
我需要读取一个包含数字列表的文件。
这段代码读取文件并将其放入二维数组中。现在我需要获得数组中所有数字的平均值,但我需要将数组的内容更改为int类型。你有哪些想法可以将to_i方法放置在哪里?
Class Terrain
    def initialize file_name
        @input = IO.readlines(file_name) #read in file
        @size = @input[0].to_i
        @land = [@size]

        x = 1
        while x <= @size
          @land << @input[x].split(/\s/)
          x += 1
        end
        #puts @land
    end
end

6
你之前的问题发生了什么?http://stackoverflow.com/questions/7993821。这与你现在的问题非常相似,但是你没有给出任何反馈、评论、投票等。那里的解决方案展示了如何使用map,但你在这个问题中仍然使用了一个非惯用的while循环。 - tokland
1
为了补充@tokland的评论,如果您不理解某个答案,通过评论询问澄清是完全可以接受的。 - Benoit Garret
2个回答

12

只需将您的数组映射为整数:

@land << @input[x].split(/\s/).map(&:to_i)

顺带一提

如果你想计算一行的平均值,可以按照以下步骤进行:

values = @input[x].split(/\s/).map(&:to_i)
@land << values.inject(0.0) {|sum, item| sum + item} / values.size

或者使用以下方法,正如Marc-André在评论中友情指出的那样:

values = @input[x].split(/\s/).map(&:to_i)
@land << values.inject(0.0, :+) / values.size

3
使用inject(0.0, :+)能够更好、更快地实现目标。 - Marc-André Lafortune
2
我对“更快”的部分很好奇,所以进行了一个快速的基准测试(对1..1000000数组求和)。使用 :+ 大约快10%。 - Benoit Garret

-2

你试过了吗?

@land << @input[x].split(/\s/).strip.to_i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接