這有點讓人困惑。如何檢查ruby散列成員是否遞歸存在?
如果你有一個散列,其中包含更多的散列,也有散列等,你如何確定一個成員是否存在超過一層深?
例如:
hash 1 =
{
"layer1" =>
{
"layer2" =>
{
"layer3" => ['Something', 'Array']
}
}
}
,你會如何去驗證「東西」存在於上述哈希如果哈希只有:
hash2 =
{
"layer1" =>
{
"layer2" => ['Other Array']
}
}
例如,我會嘗試做:
if hash2['layer1']['layer2']['layer3'].contains? 'Something'
puts "Found Something!"
end
但這會錯誤未定義的方法`包含?'爲零:NilClass。其中layer3將是NilClass,因爲它不存在。如果其中一個嵌入式哈希值爲零,則表明它不存在,但您不能輕易測試它們的存在,因爲如果您的圖層太深,它也會返回Nil。在ruby中是否有一個函數以遞歸方式檢查每個頂層圖層,而不是在您要調用.nil時請求的特定成員? E.g.我認爲會起作用的!
if hash2['layer1']['layer2']['layer3'].nil?
puts 'layer3 exists'
end
但是.nil? 只有檢查'layer3'是否存在。是否有一種方法從'layer1'開始,然後檢查'layer2'是否存在,然後是'layer3'等等。在任何部分都是零,它返回false?因爲如果'layer2'或'layer1'不存在,它會在nil:NilClass中錯誤地指出未定義的方法`[]'。
https://stackoverflow.com/q/8301566/5101493可能會幫助 –