How to sum array of numbers in Ruby?
Summing elements of an array is one of the most common operations in Ruby. Whether you’re tallying up numeric values for a simple script or doing more advanced data processing, Ruby provides multiple ways to get the job done. Below, we’ll look at three main approaches:
- The
sum
method (Ruby 2.4+) inject
(orreduce
)- ActiveSupport’s
sum
in Rails (Pre-Ruby 2.4)
1. Using the Built-in sum
Method (Ruby 2.4+)
As of Ruby 2.4, arrays have a built-in method sum
, making summation straightforward:
numbers = [1, 2, 3, 4, 5] total = numbers.sum puts total # => 15
Why Use sum
?
- Readability:
numbers.sum
clearly communicates your intention. - Options: You can provide an initial value if needed:
total = numbers.sum(100) # => 115
- Performance: Under the hood, it’s implemented efficiently in C for MRI (Matz’s Ruby Interpreter).
2. Using inject
(or reduce
)
If you’re on older Ruby versions (pre-2.4) or want a more functional style, you can use inject
or reduce
:
numbers = [1, 2, 3, 4, 5] total = numbers.inject(0) { |sum, n| sum + n } puts total # => 15
Or equivalently:
total = numbers.reduce(:+)
How It Works
inject(0)
sets the initial sum to 0.- Block Variables: The first block parameter (
sum
) accumulates the result, while the second (n
) is each element in the array. - Symbol Shortcut:
reduce(:+)
tells Ruby to apply the+
operation between elements, implicitly starting with the first element.
3. In Rails Projects (Pre-Ruby 2.4): ActiveSupport’s sum
Before Ruby 2.4 introduced the native Array#sum
, many Rails applications used ActiveSupport’s sum
method:
numbers = [1, 2, 3, 4, 5] total = numbers.sum puts total # => 15
If you’re working in a modern Rails environment, you can safely use sum
directly on arrays. But keep in mind that in older Rails versions, Array#sum
was part of ActiveSupport, not core Ruby.
Edge Cases and Considerations
- Empty Arrays
[].sum
returns0
.[].inject(0)
also returns0
.
- Mixed Data Types
- Ensure your array contains only numeric values or objects that respond to
+
. Otherwise, you may encounter aTypeError
.
- Ensure your array contains only numeric values or objects that respond to
- Performance
- For large arrays,
sum
is typically quite efficient. But if you need more complex operations, consider enumerator laziness (viaEnumerator
or external libraries) to optimize resource usage.
- For large arrays,
Level Up Your Ruby and System Design Skills
Summing an array is a fundamental operation, but truly mastering Ruby involves understanding its extensive features and best practices. If you’re aiming to excel in coding interviews or want to architect robust Rails applications, consider these DesignGurus.io courses:
-
Grokking the Coding Interview: Patterns for Coding Questions
A comprehensive guide to the key coding patterns tested at FAANG and top-tier tech companies. -
Grokking System Design Fundamentals
Ideal for learning how to design scalable, fault-tolerant systems—crucial for any production-level Ruby on Rails app.
For one-on-one guidance, check out the Coding Mock Interview or System Design Mock Interview with ex-FAANG engineers.
Conclusion
To sum an array of numbers in Ruby, you can:
- Use
sum
(Ruby 2.4+), the most straightforward and readable method. - Use
inject
orreduce
if you’re on an older Ruby version or prefer a functional style. - Use ActiveSupport’s
sum
in Rails environments (pre-Ruby 2.4), which provides similar functionality.
By choosing the method that best fits your Ruby or Rails version—and applying good coding practices—you’ll have no trouble handling sums in your Ruby applications.