配列を整理するコード

配列をユニークにしてその個数とともに返せ - rubyco(るびこ)の日記 より。

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

具体的には、["foo", "bar", "foo", "baz", "bar", "foo"] を、[ ["foo", 3], ["bar", 2], ["baz", 1] ] にする。

golf - babie, you're my home

何も見ずにちょっと試行錯誤して書いた普通のコードがこちら。

s = ["foo", "bar", "foo", "baz", "bar", "foo"]
d = []
s.each{|sv|
  found = false
  d.each{|dv|
    if sv == dv[0] then
      dv[1]+=1
      found = true
      break
    end
  }
  if found == false then
    d << [ sv, 1 ]
  end
}
p d

で、元ページとか見てみた。そうか、ハッシュ使うのか。
ってか、短くするのちょっと疲れたので、これで保留。