如何检查哈希是否"完全"包含在另一个哈希中?

use*_*882 20 ruby methods hash ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3.1.0,我想检查散列是否"完全"包含在另一个散列中并返回一个布尔值.

说我有那些哈希:

hash1 = {
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => 'value3'
}

hash2 = {
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => 'value3',
  :key4 => 'value4',
  :key5 => 'value5',
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想检查是否hash1包含在hash2即使hash2有更多的值hash1(在上面的情况下,我正在寻找的响应应该是true)?是否可以通过使用"一个唯一的代码行"\"一个Ruby方法"来做到这一点?

fl0*_*00r 38

那就足够了

(hash1.to_a - hash2.to_a).empty?
Run Code Online (Sandbox Code Playgroud)


Mic*_*ohl 5

我能想到的最简单的方法是:

hash2.values_at(*hash1.keys) == hash1.values
Run Code Online (Sandbox Code Playgroud)


zw9*_*963 5

更优雅的方法是在一个哈希合并另一个哈希时检查相等性。

例如重写Hash include?为此的实例方法。

class Hash
  def include?(other)
    self.merge(other) == self
  end
end

{:a => 1, :b => 2, :c => 3}.include? :a => 1, :b => 2 # => true
Run Code Online (Sandbox Code Playgroud)