我创建了一个程序,接受学生姓名和每个学生的分数输入。然后将学生的姓名保存为csv文件,并将分数保存在单独的csv文件中。
接下来,我有一个程序从该csv文件中读取并将名称和分数存储回数组中。然后我搜索阵列中的学生,如果发现它显示学生和学生分数。
这是我遇到问题的地方。我想找到得分数组的总和,这样我就可以使用总和找到平均值。我尝试这样做并得到错误(见标题):
score.inject(0) {|sum,i| sum += i}
puts sum
当我做一个得分时,它说: [ “100” “100” “98” “87”]
是否因为数字周围的引号而将我的分数读作字符串?如果是这样,我该如何解决这个问题?
答案 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