В 1.9.2 вы можете сделать это следующим образом, из моего опыта довольно много людей находят each_with_object
более читабельным, чем reduce/inject
(те, кто знает об этом по крайней мере):
a = ['cat','dog','fish','fish']
#=> ["cat", "dog", "fish", "fish"]
a2 = a.each_with_object(Hash.new(0)) { |animal, hash| hash[animal] += 1 }
#=> {"cat"=>1, "dog"=>1, "fish"=>2}