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

1 ruby

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

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

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

score.inject(0) {|sum,i| sum += i}
puts sum
Run Code Online (Sandbox Code Playgroud)

当我做一个得分时它会说:["100""100""98""87"]

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

Aru*_*hit 8

做就是了

score.inject(0) {|sum,i| sum += i.to_i }
Run Code Online (Sandbox Code Playgroud)

你的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
Run Code Online (Sandbox Code Playgroud)