ruby Hash包含另一个哈希,深入检查

Ole*_*ene 6 ruby hash include

做出如此深入检查的最佳方法是什么:

{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
Run Code Online (Sandbox Code Playgroud)

谢谢

Tom*_*Tom 5

我想我从那个例子(不知何故)看到了你的意思.我们检查subhash中的每个键是否都在superhash中,然后检查这些键的相应值是否以某种方式匹配:如果值是哈希值,则执行另一次深度检查,否则,检查值是否相等:

class Hash
  def deep_include?(sub_hash)
    sub_hash.keys.all? do |key|
      self.has_key?(key) && if sub_hash[key].is_a?(Hash)
        self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
      else
        self[key] == sub_hash[key]
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以看到这是如何工作的,因为该if语句返回一个值:最后一个语句被评估(我没有使用三元条件运算符,因为这会使这个更难以阅读).