“英文字+数字な文字列の繰り返しからハッシュを作る”を Squeak Smalltalk で


ときどきの雑記帖 i戦士篇 - やり方は(ry 経由で http://blog.citrusbyte.com/2008/6/2/ruby-tmtowtdi-episode-1 を。

'a10 b20 c25 d40' subStrings inject: Dictionary new into: [:hash :each |
    | pair |
    pair := each stemAndNumericSuffix.
    hash at: pair first put: pair second; yourself]
"=> a Dictionary('a'->10 'b'->20 'c'->25 'd'->40 ) "


Ruby に直訳すると

class String; def stem_and_numeric_suffix; [self[/^\D+/], self[/\d+$/].to_i] end end
class Array; def second; self[1] end end

'a10 b20 c25 d40'.split.inject({}){ |hash,each|
  pair = each.stem_and_numeric_suffix
  hash[pair.first] = pair.second; hash
}
=> {"a"=>10, "b"=>20, "c"=>25, "d"=>40}


最後のカスケードのあたり、意味は違うのに表現を似せるよう訳した感じが出ていておもしろい。w