On Mon, Jan 16, 2012 at 1:48 PM, Magnus Holm <judofyr / gmail.com> wrote: > 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: > > ¨Β΄¬µ¬¶¬΄¬µ¬¶¬¶¬·έ®εαγθίχιτθίοβκεγτ¨Θασθ®ξεχ¨°©© όψςεσό ςεσΫψέ «½τθιξΝαηξυσ Θομν ισ τθγμεαςεστ ¨ΙΝΘΟ¬ ωεσ¬ ιτ§σ κυστ τασταξhumble opinion.). [4,5,6,4,5,6,6,7].each_with_object(Hash.new(0)) {|num, hsh| hsh[num] += 1} Another way (not better) I remember is... Hash[ [4,5,6,4,5,6,6,7].sort.chunk {|n| n}.map {|ix, els| [ix, els.size] } ] See: http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-chunk It also can be... clearer?!? Hash[ [4,5,6,4,5,6,6,7].group_by {|n| n}.map {|ix, els| [ix, els.size] } ] Perhaps something like this (same as Magnus Holm) just hiding the complexity into the method. class Array def totalize_to_hash hsh = Hash.new(0) self.each do |n| hsh[n] += 1 end hsh end end [4,5,6,4,5,6,6,7].totalize_to_hash Abinoam Jr.