# Reduce vs Each With Object Both methods serve the same purpose : from an Enumerator create a single value out of it ## Reduce Reduce is prefered when you need to produce a simple value because it reduce over the returned value ```ruby [1, 2, 3].reduce(:+) > 3 ``` We can illustrate this simply with this snippet : ```ruby [1, 2, 3].reduce do |acc, v| acc += v 0 end > 0 ``` ## Each With Object Each with object is prefered when you reduce on a hash or some sort of complex object beacause is use the accumulator value and not the returned one ```ruby [1, 2, 3].each_with_object({ sum: 0 }) do |v, acc| acc[:sum] += v 0 end > {sum: 6} ``` **Fun fact**, `reduce` takes `|acc, v|` while `each_with_object` take `|v, acc|`