読みやすさを考えてみる。
どこかのブログで「"keyA valueA"」から「"keyA"=>"valueA"」のハッシュをつくっている所があった。それを「key value」という文字列から作ってみる。
こんな感じの処理をする
- "key value"という文字列を作成
- ["keyA valueA", "keyA valueB", …]という配列を生成
- keyA=>valueAという組になっているハッシュを生成
"key value" #こんな文字列から =>{"keyA"=>"valueA", "keyB"=>"valueB", "keyC"=>"valueC", "keyD"=>"valueD", "keyE"=>"valueE", "keyF"=>"valueF", "keyG"=>"valueG", "keyH"=>"valueH", "keyI"=>"valueI", "keyJ"=>"valueJ", "keyK"=>"valueK", "keyL"=>"valueL", "keyM"=>"valueM", "keyN"=>"valueN", "keyO"=>"valueO", "keyP"=>"valueP", "keyQ"=>"valueQ", "keyR"=>"valueR", "keyS"=>"valueS", "keyT"=>"valueT", "keyU"=>"valueU", "keyV"=>"valueV", "keyW"=>"valueW", "keyX"=>"valueX", "keyY"=>"valueY", "keyZ"=>"valueZ"} #こんな感じのハッシュを作成
(ハッシュは順不同なので、実際に生成されたハッシュをpメソッドなどで表示した場合には、上のようにキレイに昇順に表示されることはありません)
最初に書いたコード
str="key value" #始めの文字列 arr = ("a".."z").map do |alf| #ここら辺でアルファベットを追加 k,v = str.split alf = alf.upcase k,v = k+alf,v+alf k.concat(" "+v) end str = arr.inject(Hash.new) do |h, e| #この辺で配列からハッシュに変更 k, v = e.split h[k] = v h end p str
次に書いたコード
str = "key value" arr = ("a".."z").map {|alf| k,v = str.split.map {|e| e+alf.upcase}; k.concat(" "+v)} p arr.inject(Hash.new) {|h,e| k,v=e.split; h[k]=v; h}
何が書いてあるのかわけ分からなくなった。まるで呪文だ。
一つの処理ごとに関数へ置き換えると見やすくなるかもしれない
最終的なコード
def add_capital_letter(str) ("a".."z").map {|alf| k,v = str.split.map {|e| e+alf.upcase}; k.concat(" "+v)} end def array_to_hash(arr) arr.inject(Hash.new) {|h,e| k,v=e.split; h[k]=v; h} end def main str = "key value" p (array_to_hash(add_capital_letter(str)) end main
名前のせいかな?あんまり見やすくなっていない(;ω;)