From: SASADA Koichi Date: 2010-11-28T00:02:28+09:00 Subject: [ruby-dev:42647] Re: Enumerable#categorize  ささだです。 (2010/11/27 23:19), Yukihiro Matsumoto wrote: > h = ary.xxx{|e| [e[1],e[0]]} > #=> {"Yukihiro Matsumoto"=>["matz"], > "Nobuyoshi Nakada"=>["nobu"], > "Tanaka Akira"=>["akr"], > "Usaku NAKAMURA"=>["usa"], > "NARUSE, Yui"=>["naruse"], > "SASADA Koichi"=>["ko1"]}  この xxx について、just idea なんですが、 - Enumerable#map に第一引数を渡せるようにする - 第一引数に << していく - 省略されれば [] - Hash#<< を作る ってのはどうでしょうか。本当に思いつきなので、きっと駄目なところがたくさ んありそうですが。 class Hash def <<(arg) k, v = *arg self[k] = v end end module Enumerable def map container = [] self.each{|e| container << yield(e) } container end end class Array remove_method :map end ary = [ ["matz", "Yukihiro Matsumoto"], ["nobu", "Nobuyoshi Nakada"], ["akr", "Tanaka Akira"], ["usa", "Usaku NAKAMURA"], ["naruse", "NARUSE, Yui"], ["ko1", "SASADA Koichi"] ] # これまでの map はそのまま p ary.map{|e| [e[0], e[1]] } # Hash が作れる p ary.map({}){|e| [e[0], e[1]] } # 既存のデータも渡せる p ary.map({'znz' => 'Kazuhiro NISHIYAMA'}){|e| [e[0], e[1]] } -- // SASADA Koichi at atdot dot net