単語の出現頻度を調べる
rubyco(るびこ)の日記 - 単語の頻度を調べる を Squeak の Smalltalk で。 Smalltalk には、毎度お馴染みの Bag があるので、これを使うと便利です。というか、Bag が他に役立つ場面を思いつかんとです。
| string | string := 'We wish you a Merry Christmas, We wish you a Merry Christmas, We wish you a Merry Christmas, and A Happy New Year!'. ^ string subStrings asBag sortedCounts asArray
=> {3->'We'. 3->'you'. 3->'a'. 3->'Christmas,'. 3->'wish'. 3->'Merry'. 1->'and'. 1->'A'. 1->'Happy'. 1->'Year!'. 1->'New'}
Bag を使わずに、rubyco さんの Ruby 版の意訳っぽい版も。ハッシュは Smalltalk では「辞書(a Dictionary)」になります。デフォルト値は指定できないので、#at:ifAbsent: を使用。
| string dict | string := 'We wish you a Merry Christmas, We wish you a Merry Christmas, We wish you a Merry Christmas, and A Happy New Year!'. dict := Dictionary new. string subStrings do: [:word | dict at: word put: (dict at: word ifAbsent: [0]) + 1]. ^ dict
=> a Dictionary( 'A'->1 'Christmas,'->3 'Happy'->1 'Merry'->3 'New'->1 'We'->3 'Year!'->1 'a'->3 'and'->1 'wish'->3 'you'->3)