##伺いたいこと
作成したコードでは、下記YAMLにさらに深いrevelのコードが追加された場合、書き換える必要があります。
YAMLにさらに深いrevelのコードが追加されても書き換える必要がないコードの書き方を教えていただきたいです。
やりたいこと
下記のYAMLから値を取り出して出力するプログラムを作りたい。
lang
1revel1-1: foo 2revel1-2: 3 revel2-1: bar 4 revel2-2: 5 revel3: baz 6revel1-3: 7 revel2: 8 revel3: 9 revel4: qux
###期待する出力
revel1-1はfooです
revel1-2のrevel2-1はbarです
revel1-2のrevel2-2のrevel3はbazです
revel1-3のrevel2のrevel3のrevel4はquxです
##作成したコード
上記のYAMLから値を取り出すために下記のコードを作成しました.
###自分の考え
yamlを取り込むとhashとして取り扱うので、
- keyとvalueに分割する
- valueがhashかどうか調べる、
- hashであれば1に戻る
- hashでなければこれまでのkeyとvalueを出力する
lang
1require 'yaml' 2revel = YAML.load_file("revel.yml") 3revel.each do |a,b| 4 if b.instance_of?(Hash) 5 b.each do|c,d| 6 if d.instance_of?(Hash) 7 d.each do |e,f| 8 if f.instance_of?(Hash) 9 f.each do|g,h| 10 p "#{a}の#{c}の#{e}の#{g}は#{h}です" 11 end 12 else 13 p "#{a}の#{c}の#{e}は#{f}です" 14 end 15 end 16 else 17 p "#{a}の#{c}は#{d}です" 18 end 19 end 20 else 21 p "#{a}は#{b}です" 22 end 23end 24
上記ご指導のほどよろしくお願いいたします.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/08 15:11
退会済みユーザー
2017/03/09 02:24