Hatena::Grouprubyist

てーげーRuby

2008-06-27[たのしいRuby] たのしいRuby 練習問題 ハッシュ(前半)

たのしいRuby 練習問題 ハッシュ(前半)

| 20:34

(1) 曜日を表す英語と日本語との対応を表すハッシュwdayを定義

してください。

wday = {"Sunday" => "日曜日",
        "Monday" => "月曜日",
        "Thuesday" => "火曜日",
        "Wendsday" => "水曜日",
        "Thursday" => "木曜日",
        "Friday" => "金曜日",
        "Satuday" => "土曜日"
       }
irb(main):020:0> $KCODE='u'
=> "u"
irb(main):021:0> wday = {"Sunday" => "日曜日",
irb(main):022:1*         "Monday" => "月曜日",
irb(main):023:1*         "Thuesday" => "火曜日",
irb(main):024:1*         "Wendsday" => "水曜日",
irb(main):025:1*         "Thursday" => "木曜日",
irb(main):026:1*         "Friday" => "金曜日",
irb(main):027:1*         "Satuday" => "土曜日"
irb(main):028:1>        }
=> {"Satuday"=>"土曜日", "Friday"=>"金曜日", "Wendsday"=>"水曜日", "Monday"=>"月曜日", "Sunday"=>"日曜日", "Thuesday"=>"火曜日", "Thursday"=>"木曜日"}

(2) ハッシュのメソッドを使って、(1)のハッシュwdayのペアの数を

数えてください。

=> {"Satuday"=>"土曜日", "Friday"=>"金曜日", "Wendsday"=>"水曜日", "Monday"=>"月曜日", "Sunday"=>"日曜日", "Thuesday"=>"火曜日", "Thursday"=>"木曜日"}
irb(main):029:0> wday.keys
=> ["Satuday", "Friday", "Wendsday", "Monday", "Sunday", "Thuesday", "Thursday"]
irb(main):030:0> wday.key.size
NoMethodError: undefined method `key' for #<Hash:0xb7f851f8>
        from (irb):30
        from :0
irb(main):031:0> wday.keys.size
=> 7

(3) eachメソッドと(1)のハッシュwdayを使って、

「sunday」は日曜日のことです。

「monday」は月曜日のことです。

...

という文字列を出力してください。

irb(main):042:0> wday.each do |e|
irb(main):043:1*   ary = e.to_a
irb(main):044:1>   puts "「#{ary.first}」は#{ary.last}のことです。"
irb(main):045:1> end
「Satuday」は土曜日のことです。
「Friday」は金曜日のことです。
「Wendsday」は水曜日のことです。
「Monday」は月曜日のことです。
「Sunday」は日曜日のことです。
「Thuesday」は火曜日のことです。
「Thursday」は木曜日のことです。
=> {"Satuday"=>"土曜日", "Friday"=>"金曜日", "Wendsday"=>"水曜日", "Monday"=>"月曜日", "Sunday"=>"日曜日", "Thuesday"=>"火曜日", "Thursday"=>"木曜日"}


(4) ハッシュには、配列の%wのようなものがありません。

そこで、空白とタブと改行で区切られた文字列をハッシュに

変換するメソッドstr2hashを定義してください。

irb(main):001:0> def str2hash(str)
irb(main):002:1>   require 'enumerator'
irb(main):003:1>   h = Hash.new
irb(main):004:1>   str.split(/\s/).each_slice(2) do |e|
irb(main):005:2*     h[e.first] = e.last
irb(main):006:2>   end
irb(main):007:1>   return h
irb(main):008:1> end
=> nil
irb(main):009:0> str2hash("hoge bar fuga")
=> {"fuga"=>"fuga", "hoge"=>"bar"}

できてない!!TT

irb(main):013:0> def str2hash(str)
irb(main):014:1>   ary = str.split(/\s/)
irb(main):015:1>   ary << nil if ary.size % 2 != 0
irb(main):016:1>   require 'enumerator'
irb(main):017:1>   h = Hash.new
irb(main):018:1>   ary.each_slice(2) do |e|
irb(main):019:2*     h[e.first] = e.last
irb(main):020:2>   end
irb(main):021:1>   return h
irb(main):022:1> end
=> nil
irb(main):023:0>
irb(main):024:0* str2hash("hoge bar fuga")
=> {"fuga"=>nil, "hoge"=>"bar"}

むりやり感。