Rails-显示两个哈希之间的差异

Cli*_*int 4 ruby-on-rails

我是新手。如果问题很简单,请原谅。我有两个哈希值hash1和hash2。两者具有相同的键。我需要并排显示两个哈希值,并用不同的颜色突出显示哈希值之间的差异。

Uni*_*key 7

Rails具有Hash#diff:

http://apidock.com/rails/Hash/diff

{1 => 2}.diff(1 => 2)         # => {}
{1 => 2}.diff(1 => 3)         # => {1 => 2}
{}.diff(1 => 2)               # => {1 => 2}
{1 => 2, 3 => 4}.diff(1 => 2) # => {3 => 4}
Run Code Online (Sandbox Code Playgroud)

编辑: 但是,这已在Rails 4.1中删除。为了在更现代的项目中获得相同的结果,可以使用此方法,该方法是从上面得出的。

def hash_diff(first, second)
  first.
    dup.
    delete_if { |k, v| second[k] == v }.
    merge!(second.dup.delete_if { |k, v| first.has_key?(k) })
end

hash_diff({1 => 2}, {1 => 2})         # => {}
hash_diff({1 => 2}, {1 => 3})         # => {1 => 2}
hash_diff({}, {1 => 2})               # => {1 => 2}
hash_diff({1 => 2, 3 => 4}, {1 => 2}) # => {3 => 4}
Run Code Online (Sandbox Code Playgroud)

  • Rails *必须* Hash#diff。在4.0.2之后不推荐使用... https://apidock.com/rails/Hash/diff (3认同)
  • @jvrsgsty感谢您的提示。我为以后的rails版本添加了等效方法。 (2认同)
  • 谢谢!这也可以用 Hash#reject 来完成,这会导致一个稍微简单的答案:`first.reject { |k, v| second[k] == v }.merge(second.reject { |k, v| first.has_key?(k) })` (2认同)