# The inject and reduce Method

The `#inject` and `#reduce` methods are aliases. There is no performance benefit to either. I will use `#reduce` below.

The doc for those two methods is a bit unclear, therfore an example is better than thousands words.

Let’s start with an example without argument to the `#reduce` method.

``````list = (1..5).to_a

result = list.reduce do |sum, n|
sum + n
end

puts result # 15``````

In this case, `#reduce` will pass the first element of the array (`1`) to the first argument (`sum`) and the second element (`2`) to the second argument (`n`).

The block execution then kicks in and return `1 + 2 = 3`.

In the next iteration, that `3` will become the value of `sum` and the next element of the array (here, `3`) will become the value of `n`.

The block execution then kicks in and return `3 + 3 = 6`.

And so on until the end of the array.

## Example with one numerical argument

``````list = (1..5).to_a

result = list.reduce(6) do |sum, n|
sum + n
end

puts result # 21``````

The only difference here is the first element passed to `sum` is not the first element of the array `list`, but the argument `6` instead. The first element of the array (`1`) is passed to `n`.

In this scenario, when the block execution kicks in for the first time, it returns `6 + 1 = 7`.

## Example with one symbol argument

``````list = (1..5).to_a

result = list.reduce(:*)

puts result # 120``````

In this case, `#reduce` will perform a multiplication istead of an addition.

The result will be `1 * 2 * 3 * 4 * 5 = 120`.

It is possible to add a first numerical argument as well.

#ruby