配列をユニークにしてその個数とともに返せ2

配列をユニークにしてその個数とともに返せ。

具体的には、["foo", "bar", "foo", "baz", "bar", "foo"] を、[ ["foo", 3], ["bar", 2], ["baz", 1] ] にする。
golf - babie, you're my home

に一行でやる答えが公開されていました。

%w|foo bar foo baz bar foo|.inject(Hash.new 0){|r,e|r[e]+=1;r}.to_a

配列や連想配列の類の各要素についてループで回して手続き思考的にいじっていく
という発想自体がRuby的にはダメダメっぽかったです。
処理を手続きじゃなくて、ブロックを渡すことによるタプルからタプルへの変換みたいに捉えた方が良いのかな?
仕事でも個人的に使いはじめたし、勉強しつついろいろ試してみよう。