今日はじめて知ったこと
引数の展開
def f1 a,c; p a; p c; end def f2 a,*c; p a; pc; end f1(1,2,3,4,5) #=> ArgumentsError f2(1,2,3,4,5) #=> 1 #=> [2,3,4,5]
"key value"から「{keyA=>valueA ... keyZ=>valueZ}」前にやってた
上の二つを使うと簡単に創ることができるようになる。
Hash[*("A".."Z").map {alf| "key value".split.map {|e| e.concat(alf)}}.flatten] #前のを一行にしたもの ("A".."Z").map {|alf| k,v = "key value".split.map {|e| e+alf}; k.concat(" "+v)}.inject(Hash.new) {|h,e| k,v=e.split; h[k]=v; h}
hash.[]便利!!
でも少し考えてみると
途中で["keyA valueA"]に戻す必要ない(下の方)
これで十分
("A".."Z").map {|alf| k,v = "key value".split.map {|e| e.concat alf}}.inject(Hash.new) {|h,e| h[e[0]]=e[1]; h}
どっちがいいかは気分しだい?*3