一个哈希是否包含另一个哈希

假设我们有“深度哈希”,如:

b = {1 => {2 => {} }, 4 => {} } a = {1 => {2 => {3 => {} }}, 4 => {}, 5 => "123" } 

要么

 b = {1 => {children: {2 => {children: false} }}} a = {1 => {name: "name", surname:"sur", children: {2 => {name: "name", surname:"sur", children: false}}}, 3 => {}} 

a包括b但不包括副词;

这是我的尝试:

 class Hash def >=(b) eq ||= true b.each do |k, v| if !(self.include? k) eq = false elsif ( ((self[k]&&v).is_a? Hash) && !((v||self[k]).empty?) ) self[k]>=v end end return eq end end a >= b # true b >= a # false 

精简版:

 class Hash def >=(b) eq = true b.each { |k, v| eq &= !(self.include? k) ? false : ( ( ((self[k]&&v).is_a? Hash) && !((v||self[k]).empty?) ) ? self[k]>=v : true)} return eq end end 

我的问题:那有更优雅的方式吗?

function方法:

 class Hash def >=(other) other.all? do |key, value| if self.has_key?(key) value.is_a?(Hash) ? (self[key].is_a?(Hash) && self[key] >= value) : (self[key] == value) else false end end end end