Hatena::Grouprubyist

krystal: プログラミング超初心者(文系)

2008-12-08 (Mon)

P244 - str2hashを定義しよう

19:15

  • ハッシュには配列の%wのようなものがありません
  • 空白(/\s+/)で区切られた文字列をハッシュに変換するメソッドを定義しよう
def str2hash(string)
  ary = string.split(/\s+/)
  Hash[*ary]   #多重代入
end

p str2hash("blue 青 white 白\nred 赤")                           #=> {"white"=>"白", "blue"=>"青", "red"=>"赤"}
p str2hash("movie 死神の精度 book ハリーポッター music ロック")  #=> {"music"=>"ロック", "movie"=>"死神の精度", "book"=>"ハリーポッター"}

メモ:配列の多重代入

文字列の最初は空白だとエラーが出るので、まず前後の空白を取る

def str2hash(string)
  ary = string.strip.split(/\s+/)
  Hash[*ary]   #多重代入
end

p str2hash("blue 青 white 白\nred 赤")                           #=> {"white"=>"白", "blue"=>"青", "red"=>"赤"}
p str2hash("movie 死神の精度 book ハリーポッター music ロック")  #=> {"music"=>"ロック", "movie"=>"死神の精度", "book"=>"ハリーポッター"}
p str2hash(" black 黒      green 緑\ngold 金  ")                 #=> {"black"=>"黒", "gold"=>"金", "green"=>"緑"}

holysugarholysugar2008/12/10 16:48p str2hash(" blue 青 white 白\nred 赤") と、最初に空白を入れるとエラーになります。想定通り?

krystalkrystal2008/12/10 17:05>holysugarさん
コメントありがとうございます。
最初の空白ですか!?想定していなかったです。
stripを使って前後の空白を取るようにしました。

holysugarholysugar2008/12/10 21:04ストレートに聞くと、String#split のマニュアルは読みましたか?

krystalkrystal2008/12/15 20:06>holysugarさん
「1 バイトの空白 ' 'か $; が使用される場合でその値が nil: 先頭の空白を除いて空白で分割する。」と書いてあります。
ということは、ary = string.split にすればエラーがなくなります。