我正在学习
Ruby,并且已经有一些关于我正在学习的书中的upto方法的讨论.我糊涂了.它到底是做什么用的?
例:
- grades = [88,99,73,56,87,64]
- sum = 0
- 0.upto(grades.length - 1) do |loop_index|
- sum += grades[loop_index]
- end
- average = sum/grades.length
- puts average
解决方法
我们试试一下解释:
您定义一个数组
- grades = [88,64]
并准备一个变量来存储总和:
- sum = 0
grades.length是6(数组中有6个元素),(grades.length – 1)是5.
使用0.upto(5)从0到5循环,loop_index将为0,然后1 …
数组的第一个元素是grade [0](数组中的索引从0开始).
这就是你必须从元素数量中减去1的原因.
- 0.upto(grades.length - 1) do |loop_index|
将loop_index的值添加到sum.
- sum += grades[loop_index]
- end
现在,您循环每个元素并获得数组中所有元素的总和.
你可以计算平均值:
- average = sum/grades.length
现在你把结果写到stdout:
- puts average
这是一种非类似ruby的语法.类似Ruby,你会这样做:
- grades = [88,64]
- sum = 0
- grades.each do |value|
- sum += value
- end
- average = sum/grades.length
- puts average
基于Marc-Andrés的附录评论:
您也可以使用inject来避免定义初始总和:
- grades = [88,64]
- sum = grades.inject do |sum,value|
- sum + value
- end
- average = sum / grades.length
- puts average
甚至更短:
- grades = [88,64]
- average = grades.inject(:+) / grades.length
- puts average