如何比较这两个哈希在红宝石

时间:2019-06-07 09:47:00

标签: ruby

我正在编写测试用例以比较两个哈希。 那里的类​​名是相同的,即哈希。

LeaveType

这可以通过将任何哈希的键修改为to_sym来完成。

但是我敢肯定,有另一种比较方式。

2 个答案:

答案 0 :(得分:1)

1。象征钥匙

这些哈希不相等,因为密钥不相等。如果要比较值,则无论键是字符串还是符号,都可以使用to_sym转换键。 (请注意,这不会转换嵌套键)。

first_hash.transform_keys(&:to_sym) == second_hash.transform_keys(&:to_sym)

2。比较为JSON(不推荐)

我不推荐这样做,但是由于从技术上讲是可行的,因此出于娱乐和参考目的,在此添加了它。

执行此操作的另一种方法是检查JSON表示形式是否相同。它可能会更慢,并且要求每个哈希中的键必须具有相同的顺序。

require 'json'
first_hash.to_json == second_hash.to_json

答案 1 :(得分:0)

与排序无关的比较:

h1, h2 = {"first_name" => "Vikas", "last_name" => "Prasad" },
         {first_name: "Vikas", last_name: "Prasad"} 

[h1, h2].
  map(&:sort).
  reduce(&:zip).
  flat_map do |(k1, v1), (k2, v2)|
    [k1.to_s == k2.to_s] && [v1 == v2]
  end.reduce(&:&)