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

时间:2010-09-30 00:51:18

标签: ruby hash include

进行如此深入检查的最佳方法是什么:

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

感谢

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

我喜欢这个:

class Hash
  def include_hash?(other)
    other.all? do |other_key_value|
      any? { |own_key_value| own_key_value == other_key_value }
    end
  end
end