ruby 哈希包含另一个哈希,深度检查
Posted
技术标签:
【中文标题】ruby 哈希包含另一个哈希,深度检查【英文标题】:ruby Hash include another hash, deep check 【发布时间】:2011-04-19 02:59:10 【问题描述】:进行这种深入检查的最佳方法是什么:
:a => 1, :b => :c => 2, :f => 3, :d => 4.include?(:b => :c => 2, :f => 3) #=> true
谢谢
【问题讨论】:
目前还不清楚您真正希望这段代码做什么。您是否要检查散列值是否为包含值 2 的 key :c 和值为 3 的 key :f 的散列值?您是否要检查 key b: 的哈希值是否是包含 key :c 值为 2 和 key :f 值为 3 的哈希值?或者您是否要检查键 b: 的哈希值是否是 _exactly 哈希键 :c 的值为 2 和键 :f 的值为 3?请准确解释您想要什么 - 最好有一些返回 true 的示例,以及一些返回 false 的示例。 【参考方案1】:我想我从那个例子中明白了你的意思(不知何故)。我们检查 subhash 中的每个 key 是否在 superhash 中,然后检查这些 key 的对应值是否以某种方式匹配:如果值是 hash,则执行另一个深度检查,否则,检查值是否相等:
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
语句返回一个值:最后一个语句被评估(我没有使用三元条件运算符,因为这会使它变得更丑陋且更难阅读)。
【讨论】:
【参考方案2】:我喜欢这个:
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
【讨论】:
以上是关于ruby 哈希包含另一个哈希,深度检查的主要内容,如果未能解决你的问题,请参考以下文章