进行如此深入检查的最佳方法是什么:
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
感谢
答案 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