做出如此深入检查的最佳方法是什么:
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
Run Code Online (Sandbox Code Playgroud)
谢谢
我想我从那个例子(不知何故)看到了你的意思.我们检查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语句返回一个值:最后一个语句被评估(我没有使用三元条件运算符,因为这会使这个更难以阅读).
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |