Давайте попробуем объяснить:
Вы Определяете массив
grades = [88,99,73,56,87,64]
и подготовить переменный для хранения суммы:
sum = 0
grades.length
является 6 (есть 6 элементов в массив), (grades.length - 1)
is 5.
с 0.upto(5)
Вы петля от 0 до 5, loop_index
будет 0, затем 1 ...
Первый элемент массива - grades[0]
(индекс в массиве начинается с 0). Вот почему вы должны вычесть 1 из числа элементов.
0.upto(grades.length - 1) do |loop_index|
Добавьте значение loop_index в сумму.
sum += grades[loop_index]
end
Теперь вы зацикливаете на каждом элементе и суммируете все элементы массива.
Вы можете вычислить среднее:
average = sum/grades.length
Теперь вы пишете результат на стандартный вывод:
puts average
Это был не-рубинового как синтаксис. Ruby, как вы могли бы сделать это следующим образом:
grades = [88,99,73,56,87,64]
sum = 0
grades.each do |value|
sum += value
end
average = sum/grades.length
puts average
Добавление на основе Marc-Андреса комментарий:
Вы можете также использовать inject
, чтобы избежать, чтобы определить первоначальную сумму:
grades = [88,99,73,56,87,64]
sum = grades.inject do |sum, value|
sum + value
end
average = sum/grades.length
puts average
или еще короче:
grades = [88,99,73,56,87,64]
average = grades.inject(:+)/grades.length
puts average
Возможно, вам захочется найти другую книгу. В этом случае это 'upto' <' grades.length.times' <'grades.each' <' grades.inject (0,: +) '. –
Надеюсь, ваша книга не говорит, что 'upto' является оператором; это обычный метод. Соответственно отредактировал ваш вопрос. –
@ Marc-AndréLafortune Много книг Ruby - вот что они говорят вам точно, что * Ruby имеет, но не * почему * вы использовали бы один путь над другим. :( –