Ruby 一个散列是否包含另一个散列

Ruby 一个散列是否包含另一个散列,ruby,Ruby,假设我们有“深度散列”,比如: 或 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?) ) se

假设我们有“深度散列”,比如:

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
我的问题是:还有更优雅的方法吗?

功能性方法:

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
功能方法:

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

看起来你被淘汰了(:@ted:看来,这是一个有趣的问题。请注意,你也可以使用
all?
之前的条件进行操作,在执行任何操作之前检查你是否拥有所有密钥:
if(other.keys-self.keys).empty?…all?这里没有if.has_键也没有else…else false的东西看起来你退出了比赛(:@ted:看来,这是一个有趣的问题。请注意,你也可以使用
all?
之前的条件来执行此操作,在执行任何操作之前检查你是否拥有所有的键:
if(other.keys-self.keys)。此处为空?…all?填充,不带if.has\u键,也不带else…else false
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