ハッシュ内の単純なハッシュでキー/値の問題を解決しようとしています。Rubyハッシュは、私が知っているキーの値としてnilを返しています。
私の鍵は私のコードで使用されるAPIから来ているタイプ「OpenStudio :: OptionalString」は次のとおりです。デバッグモードでは、私はハッシュを検査し、最初の行が正しくキーを入力したことを見た
#---NOTE---: key here is of type OpenStudio::OptionalString
my_hash[key]['heating_plant_system'] = 'Boiler'
my_value = my_hash[key]['heating_plant_system'] #returning nil
/2行目を実行すると値を取得できません。
my_value
はnilを返します。私はそれがこの奇妙なキータイプに起因することを知っていますが、私はそれを変更する自由がありません。
私のハッシュからこの値にアクセスしようとしたときに間違ったことをしていますか?
一般的なことを維持しようとすると、あまりにも多くの文脈を犠牲にしたかもしれません。
require 'openstudio'
model = OpenStudio::Model::Model.new
my_zone = OpenStudio::Model::ThermalZone.new(model)
my_zone.setName('Zone 1')
zone_hash = Hash.new { |h, k| h[k] = { } }
zone_hash[my_zone.name]['heating_plant'] = 'Boiler'
puts "my zone's name is #{my_zone.name}" #Output: 'my zone's name is Zone 1'
puts zone_hash.to_s #Output: {#<OpenStudio::OptionalString:0x5fa4980 @__swigtype__="_p_boost__optionalT_std__string_t">=>{"heating_plant"=>"Boiler"}}
if zone_hash[my_zone.name]['heating_plant'].nil?
puts 'Im unable to access this hash, help!' #<--- this is executed
else
puts "I am able to access #{zone_hash[my_zone.name]['heating_plant']}"
end
私は(簡単に)このzone_hash
がOpenStudio :: OptionalString以外にキーを変更することで、私の実際のコードベースで働いていた方法を元に戻すことができませんでしたので、私はこのループを使用:これは完全な例であります回避策としてそれはきれいではありませんが、それは仕事は私が行うために必要な細かいチェックのために行われました:
zones_hash.each {|k,v|
if zone.name.to_s == k.to_s
v.each {|k1,v1|
if k1 == 'heating_plant'
heating_plant = v1.to_s
end
}
end
}
どのようなタイプの 'my_hash [キー]'ですか? – coreyward
'my_hash [key] .keys'の出力を表示できますか? –
より詳細な例はありません。私は、あなたが[dig](http://stackoverflow.com/questions/41753945/ruby-hash-returning-nil-for-value-for-a- key-i-know-exists)メソッドを呼び出します。 – OneNeptune