How to Find the Sum of an Array of Numeric Strings in Ruby?

Find out how to calculate the sum of an array of numeric strings in Ruby

In Ruby, you can get the sum of all numbers in an array by using Array#sum or the Enumerable#inject method:

# Ruby 2.4+
print [1, 2, 3, 4, 5].sum #=> 15
# Ruby <2.4
print [1, 2, 3, 4, 5].inject(0, :+) #=> 15

However, neither of these work on an array of numeric strings:

# Ruby 2.4+
# String can't be coerced into Integer (TypeError)
print ['1', '2', '3', '4', '5'].sum
# Ruby <2.4
# String can't be coerced into Integer (TypeError)
print ['1', '2', '3', '4', '5'].inject(0, :+)

Therefore, to calculate the sum of an array of numeric strings, you can do either of the following:

# Ruby 2.4+
print ['1', '2', '3', '4', '5'].map(&:to_f).sum #=> 15.0
# Ruby <2.4+
print ['1', '2', '3', '4', '5'].map(&:to_f).inject(0, :+) #=> 15.0

In both the above-mentioned instances, the Array#map method is used to convert numbers to float first, and then sum of all elements of the array is calculated using either Array#sum or Enumerable#inject method. This works with numeric strings, integers, rational numbers, etc. (as you can see in the examples below):

# Ruby 2.4+
def sum(numbers)
    numbers.map(&:to_f).sum
end

print sum(['1', '2', '3', '4', '5']) #=> 15.0
print sum([1, '2', 3, '4', 5]) #=> 15.0
print sum([1, 2, 3, 4, 5]) #=> 15.0

print sum(['1.2', '-4', '4.5', '3', '10']) #=> 14.7
print sum(['1', '-2', '3', '-4', '5']) #=> 3.0

print sum(['']) #=> 0.0
print sum([]) #=> 0
# Ruby <2.4+
def sum(numbers)
    numbers.map(&:to_f).inject(0, :+)
end

print sum(['1', '2', '3', '4', '5']) #=> 15.0
print sum([1, '2', 3, '4', 5]) #=> 15.0
print sum([1, 2, 3, 4, 5]) #=> 15.0

print sum(['1.2', '-4', '4.5', '3', '10']) #=> 14.7
print sum(['1', '-2', '3', '-4', '5']) #=> 3.0

print sum(['']) #=> 0.0
print sum([]) #=> 0

Hope you found this post useful. It was published . Please show your love and support by sharing this post.