On Mon, Jan 16, 2012 at 17:04, Adam Prescott <adam / aprescott.com> wrote:
> On Mon, Jan 16, 2012 at 16:00, Sigurd <cu9ypd / gmail.com> wrote:
>
>> [4,5,6,4,5,6,6,7].inject(Hash.new(0)) {|res, x| res[x] += 1; res }
>>
>
> I think this is a misuse of inject, personally, every time I see it. It's
> harder to read and it doesn't give the feeling of actually "reducing"
> (inject's alias) the array down to one thing. The required `; res` is a
> sign of that. Compare:
>
> [1, 2, 3, 4].inject(5) { |a, b| a + b }

There's always each_with_object, although it's a little long:

  [4,5,6,4,5,6,6,7].each_with_object(Hash.new(0)) { |x, res| res[x] += 1 }