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 哈希包含另一个哈希,深度检查的主要内容,如果未能解决你的问题,请参考以下文章

如果值递归包含字符串,Ruby 返回***哈希键

如何检查一个哈希是不是“完全”包含在另一个哈希中?

在 Ruby 中设置哈希等于另一个哈希

使用来自另一个哈希的新值更新了 Ruby 哈希数组

深度分析及实现哈希表

ruby 将哈希值转换为排序的字符串数组,以便与另一个哈希值进行比较