Ruby1.9.2はハッシュに順序を導入しました。順序を考慮して、2つのハッシュが等しいかどうかをテストするにはどうすればよいですか?
与えられた:
h1 = {"a"=>1, "b"=>2, "c"=>3}
h2 = {"a"=>1, "c"=>3, "b"=>2}
とを返す比較演算子が必要false
です。次のいずれも機能しません。h1
h2
h1 == h2 # => true
h1.eql? h2 # => true
Ruby1.9.2はハッシュに順序を導入しました。順序を考慮して、2つのハッシュが等しいかどうかをテストするにはどうすればよいですか?
与えられた:
h1 = {"a"=>1, "b"=>2, "c"=>3}
h2 = {"a"=>1, "c"=>3, "b"=>2}
とを返す比較演算子が必要false
です。次のいずれも機能しません。h1
h2
h1 == h2 # => true
h1.eql? h2 # => true
おそらく最も簡単なのは、対応するアレイを比較することです。
h1.to_a == h2.to_a
keys
それらのメソッドの出力を比較できます。
h1 = {one: 1, two: 2, three: 3} # => {:one=>1, :two=>2, :three=>3}
h2 = {three: 3, one: 1, two: 2} # => {:three=>3, :one=>1, :two=>2}
h1 == h2 # => true
h1.keys # => [:one, :two, :three]
h2.keys # => [:three, :one, :two]
h1.keys.sort == h2.keys.sort # => true
h1.keys == h2.keys # => false
しかし、キーの挿入順序に基づいてハッシュを比較するのはちょっと奇妙です。何をしようとしているのかによっては、基礎となるデータ構造を再検討することをお勧めします。