Дополнительно
Как суммировать массив чисел в Ruby?
У меня есть массив целых чисел.
Например:
array = [123,321,12389]
Есть ли какой-нибудь хороший способ получить их сумму?
Я знаю, что
sum = 0
array.each { |a| sum+=a }
сработает.
551
20
Или попробуйте использовать способ Ruby 1.9:
Примечание: необходим базовый случай
0
, иначе в пустых массивах будет возвращатьсяnil
:Попробуйте это:
См. документацию Ruby's Enumerable Documentation
(примечание: базовый случай
0
необходим для того, чтобы0
возвращалось в пустом массиве вместоnil
)В то время как эквивалент
массива.инъекционные(0, :+)
, термин сокращения входит более обычным языком с ростом модели программирования MapReduce.вводить, сокращения, фолд, накапливать, и сжимать все синонимы как класс складывая функции. Я считаю, согласованность базы кода, самое важное, но с различными общинами, как правило, предпочитают одно слово за другим, он, тем не менее, полезно знать альтернативы.
Чтобы подчеркнуть карте-уменьшить словоблудие, вот версия, которая немного более снисходительными на то, что попадает в этот массив.
Некоторые дополнительные соответствующие значение:
В качестве альтернативы (просто для сравнения), если у вас установлен Rails (на самом деле просто ActiveSupport):
Для Ruby >=2.4.0 вы можете использовать
sum
из Enumerables.Это опасно для mokeypatch базовых классов. Если вы любите опасность и используете старую версию Ruby, вы могли бы добавить
#ГУУ
кмассив
класса:Новый для Ruby 2.4.0
Вы можете использовать перечислимые метко назвал метод
#сумма
. Она имеет много преимуществ по сравнению вложил (:+) но есть некоторые важные замечания, которые следует читать в конце, как хорошо.Примеры
# Хребты#
Массивы
Важно
Этот метод не является эквивалентом
#впрыснуть(:+)
. НапримерКроме того,
Смотрите этот ответ дополнительные сведения о том, почему
сумма
, как это.Руби 2.4+ / рельсы -
массива.сумма
, т. е.[1, 2, 3].сумме # => 6
Руби до 2.4 -
массива.впрыснуть (:+) или массива.функция reduce(:+)
*Примечание:
#сумма метод-это новое дополнение к 2.4 для
перечислить`, так что вы теперь сможете использовать массив.сумма в чистого Рубина, а не просто рельсы.Просто ради разнообразия, вы также можете сделать это, если Ваш массив не массив чисел, а массив объектов, которые имеют свойства числа (например, размеры):
Руби 1.8.7 способ заключается в следующем:
Вы можете просто использовать:
Этого вполне достаточно
[1,2,3].впрыснуть('+')
Руби 2.4.0 отпускают, и он имеет перечисляемую#сумма метод. Так что вы можете сделать
Примеры из документации:
для массива с нулевыми значениями, мы можем сделать компактными, а затем ввести сумму экс-
Также позволяет
[1,2].сумма{|х| х * 2 } == 6
:Работает на ряды тоже... следовательно,
Если вы чувствуете golfy, вы можете сделать
Это позволит создать строку "и я 123+321+12389&; а затем использовать функцию eval, чтобы сделать сумму. Это только для целей игры в гольф, вы не должны использовать его в правильный код.
Способ 1:
Способ 2:
Способ 3:
Способ 4: Когда массив содержит нулевые и пустые значения, по умолчанию, если вы используете любой из вышеупомянутых функций, снизить, сумму, вкачать все будет путем
Вы можете преодолеть это,
Способ 6: ивал
Вычисляет выражение Рубин(ов) в строке.
3 способа мы можем сделать сумма массива
массив.впрыснуть(0){|Сум,х| сумма + х }
массива.впрыснуть('+')
массива.присоединяйтесь('+')
Или вы можете попробовать этот метод:
Это самый короткий путь. Попробуйте его.
массива.впрысните :+