ruby - 将 2 个 Hash 与由数组组成的值进行比较

标签 ruby

我有 2 个哈希,比方说 A,B

A: { 'key1' => [a, b], 'key2' => 'c' }
B: { 'key1' => [b, a], 'key2' => 'c' }

比较这两个哈希值的最佳方法是什么。数组内容的顺序无关紧要。所以在我的例子中,哈希 A 和 B 是相等的

最佳答案

这并不像乍看起来那么容易。
有必要考虑几个细微差别:

  • 散列中的元素数量可能不匹配;
  • 在两个散列中具有相同键的项目可以是不同类型。

比较通用的解决方案可以如下:

def hashes_comp(hash1, hash2)
  return false if hash1.size != hash2.size
  hash1.each do |key, value|
    if value.class == Array
      return false if hash2[key].class != Array || value.sort != hash2[key].sort
    else
      return false if value != hash2[key]
    end
  end
  true
end

hash_a = {'key1' => ['a', 'b'], 'key2' => 'c'}
hash_b = {'key1' => ['b', 'a'], 'key2' => 'c'}
hash_c = {'key1' => ['a', 'c'], 'key2' => 'c'}
hash_d = {'key1' => ['a', 'b'], 'key2' => 'd'}
hash_e = {'key1' => ['a', 'b'], 'key2' => ['a', 'b']}
hash_f = {'key1' => ['a', 'b'], 'key2' => 'c', 'key3' => 'd'}

hashes_comp(hash_a, hash_b) #=> true
hashes_comp(hash_a, hash_c) #=> false
hashes_comp(hash_a, hash_d) #=> false
hashes_comp(hash_a, hash_e) #=> false
hashes_comp(hash_a, hash_f) #=> false

关于ruby - 将 2 个 Hash 与由数组组成的值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718887/

相关文章:

ruby - Ruby 方法 instance_eval() 和 send() 不会否定私有(private)可见性的好处吗?

ruby - 创建大文件的最快方法?

ruby - 在 Shell 脚本上运行 .rb (Ruby) 文件

ruby - Emacs ruby​​ 模式 if 表达式缩进

ruby-on-rails - 从方法返回的对象的索引方法-Elasticsearch

ruby -/\p{Alpha}/i 和/\p{L}/i 在 ruby​​ 中有什么区别?

ruby - 如何检查常量是否由Ruby中的符号定义?

ruby-on-rails - 如何添加存储为字符串的小时和分钟

ruby - Codecademy "converting between symbols and strings" ruby 类(class)

ruby - 将 Ruby 脚本添加到 AJAX 静态网站的最简单方法