示例如下:
if house['windows'][floor_1]
house['windows'][floor_1] << north_side
else
house['windows'][floor_1] = [north_side]
end
检查现有密钥的最佳方法?
答案 0 :(得分:1)
house['windows']
已经是哈希中的一个元素,这有点让人讨厌,所以我将windows
用作引用哈希的变量。
为windows
哈希设置默认值,以便为任何不存在的键分配一个数组值:
windows = Hash.new {|hash, key| hash[key] = [] }
现在,您可以自动将(<<
)附加到新的哈希元素。
windows['floor_1'] << 'north_side'
windows # => {"floor_1"=>["north_side"]}
对于您的具体情况,将windows
替换为house['windows']
。
编辑
正如评论中指出的那样,可以将这种行为添加到已经实例化的哈希中:
windows.default_proc = proc {|hash, key| hash[key] = [] }
答案 1 :(得分:1)
我想是因为您的哈希值:
house = { windows: { floor_0: ['f0'] } }
您可以使用Hash#has_key?
house[:windows].has_key? :floor_1 #=> false
因此您可以创建它:
house[:windows].merge!({floor_1: []}) unless house[:windows].has_key? :floor_1
Hash#default_proc=
:来定义默认值,那就更好了。
house[:windows].default_proc = proc { |h, k| h[k] = [] }
所以你可以
house[:windows][:floor_3] << 'f3'
house #=> {:windows=>{:floor_0=>["f0"], :floor_1=>[], :floor_3=>["f3"]}}
答案 2 :(得分:1)
我会这样:
house['windows'][floor_1] ||= []
house['windows'][floor_1] << north_side