Ruby 检查哈希是否存在密钥;如果不是,则创建数组并附加值

Ruby 检查哈希是否存在密钥;如果不是,则创建数组并附加值,ruby,Ruby,示例如下: if house['windows'][floor_1] house['windows'][floor_1] << north_side else house['windows'][floor_1] = [north_side] end 如果房子[窗户][楼层1] house['windows'][floor_1]house['windows']是散列中的一个元素这一事实已经有点令人费解,因此我将使用windows作为引用散列的变量 为windows散列设置默认

示例如下:

if house['windows'][floor_1]
  house['windows'][floor_1] << north_side
else
  house['windows'][floor_1] = [north_side]
end
如果房子[窗户][楼层1]

house['windows'][floor_1]house['windows']
是散列中的一个元素这一事实已经有点令人费解,因此我将使用
windows
作为引用散列的变量

windows
散列设置默认值,以便为任何不存在的键分配一个数组值:

windows = Hash.new {|hash, key| hash[key] = [] }

现在您可以附加(
事实上,
house['windows']
已经是散列中的一个元素了,这有点让人费解,因此我将使用
windows
作为引用散列的变量

windows
散列设置默认值,以便为任何不存在的键分配一个数组值:

windows = Hash.new {|hash, key| hash[key] = [] }

现在您可以根据您的哈希值追加(
),我想:

house = { windows: { floor_0: ['f0'] } }
您可以使用

因此,您可以创建它:

house[:windows].merge!({floor_1: []}) unless house[:windows].has_key? :floor_1

如果使用以下公式定义defalt值,效果更好:

所以你可以

house[:windows][:floor_3] << 'f3'

house #=> {:windows=>{:floor_0=>["f0"], :floor_1=>[], :floor_3=>["f3"]}}
house[:windows][:floor_3]{:windows=>{:floor_0=>[“f0”],:floor_1=>[],:floor_3=>[“f3”]}

考虑到你的散列,我想:

house = { windows: { floor_0: ['f0'] } }
您可以使用

因此,您可以创建它:

house[:windows].merge!({floor_1: []}) unless house[:windows].has_key? :floor_1

如果使用以下公式定义defalt值,效果更好:

所以你可以

house[:windows][:floor_3] << 'f3'

house #=> {:windows=>{:floor_0=>["f0"], :floor_1=>[], :floor_3=>["f3"]}}
house[:windows][:floor_3]{:windows=>{:floor_0=>[“f0”],:floor_1=>[],:floor_3=>[“f3”]}

我想要一些类似的东西:

house['windows'][floor_1] ||= []
house['windows'][floor_1] << north_side
house['windows'][floor|u 1]| |=[]

房子['windows'][floor_1]我想要一些类似的东西:

house['windows'][floor_1] ||= []
house['windows'][floor_1] << north_side
house['windows'][floor|u 1]| |=[]

house['windows'][floor_1]一种常见方法的可能重复(有些声明比使用默认程序快):
h={};h[:a]=(h[:a]|[])[1];h[:a]=(h[:a]|[])[1,2]
什么是
house
?一种常见方法的可能重复(有些声明比使用默认程序快):
h={};h[:a]=(h[:a]| |[])[1];h[:a]=(h[:a]| |[])[1,2]
house
是什么?如果
windows
是外部数据,我们无法创建它怎么办?@mechnicov,那么您可以使用设置默认进程。
windows.default\u proc=proc{/code>
@JohanWentholt,好主意。我问这个问题是为了让user513951改进答案。如果
windows
是外部数据,而我们无法创建它,该怎么办?@mechnicov,那么您可以使用设置默认进程。
windows.default\u proc=proc{| hash,key | hash[key]=[]
@JohanWentholt,好主意。我问这个问题是为了让用户513951改进答案。