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改进答案。