Ruby:字符串不能被强制转换为fixnum

时间:2014-02-26 21:15:11

标签: ruby

我创建了一个程序,接受学生姓名和每个学生的分数输入。然后将学生的姓名保存为csv文件,并将分数保存在单独的csv文件中。

接下来,我有一个程序从该csv文件中读取并将名称和分数存储回数组中。然后我搜索阵列中的学生,如果发现它显示学生和学生分数。

这是我遇到问题的地方。我想找到得分数组的总和,这样我就可以使用总和找到平均值。我尝试这样做并得到错误(见标题):

score.inject(0) {|sum,i| sum += i}
puts sum

当我做一个得分时,它说: [ “100”  “100”  “98”  “87”]

是否因为数字周围的引号而将我的分数读作字符串?如果是这样,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:8)

只做

score.inject(0) {|sum,i| sum += i.to_i }

您的score数组是["100", "100", "98", "87"]。在数组中,所有元素都是String个对象,您需要将它们转换为Fixnum个对象。为此,您需要使用方法String#to_i

>> score = ["100", "100", "98", "87"]
=> ["100", "100", "98", "87"]
>> score.inject(0) {|sum,i| sum += i.to_i }
=> 385
>> score.map(&:to_i).inject(:+) # another way to do this
=> 385