Array.map関数
やっぱRubyは楽しいっすよ.なんかRubyで書きたいな,と思ったので,Array.map関数を自作自作.
とりあえず簡単な所から.
class Array def mymap1(&b) mapped = [] self.each{|e| mapped << b[e] } mapped end end
このb[e]って記法,素敵ですよね.怪しい感じが何とも.
次ぃ.もしこの世からeachメソッドが無くなったときのために.
class Array def mymap2(&b) mapper = lambda{ |xs,mapped| return mapped if xs.empty? xss = xs.dup mapped << b[xss.shift] mapper[xss,mapped] } mapped = mapper[self,[]] end end
実行してみる.
> a = (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] > a.map{|e| e**2} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] > a.mymap1{|e| e**2} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] > a.mymap2{|e| e**2} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
単純だからか(?)他のアルゴリズムが浮かばねーや.しかし,.call()を[]に書き換えると,やっぱり違和感があるな.