Rubyで二次元ハッシュの存在確認
自分メモ。
■hash['hogehoge']['fugafuga']の存在確認をする。
defined?を使う。
if defined? hash['hogehoge']['fugafuga'] then puts "あり" else puts "なし" end
三項演算子を使って書くならこう。
puts defined?(hash['hogehoge']['fugafuga']) ? "あり" : "なし"
defined?()のように三項演算子では()が必要。
勘違いしていました。
コメントより
http://d.hatena.ne.jp/takeru-c/20090519/1242752019#c106600985
defined?は「式が定義されていなければ偽」なので、エラーなく式が実行できる状態であればキーが無くても偽以外になります。
>> hash = { 'hogehoge' => {} } => {"hogehoge"=>{}} >> defined?(hash['hogehoge']['fugafuga']) ? "Y" : "N" => "Y"
うわーい、だめじゃーん。
というわけで、詳しくはコメントを参照してもらうとして、簡単にチェック(nilかどうかを判定)するなら下記のとおり。
>> h = Hash.new({}) => {} >> h['hogehoge']['fugafuga'] => nil
デフォルト値を指定してあげるといいらしい。