0

Ruby 1.9では、ハッシュは挿入の順序に基づいてソートされます。test_hash_is_unorderedメソッドに対するRubykoansのアサーションがtrueを返すのはなぜですか?

私にとって、メソッドのタイトルはかなり誤解を招くものです...多分それはRubyが異なるキー順序の挿入で作成された2つの等しいハッシュを認識するという事実を指します。

しかし、理論的には、この種のアサーションは次のとおりです。

hash1 = { :one => "uno", :two => "dos" }
hash2 = { :two => "dos", :one => "uno" }

assert_equal ___, hash1 == hash2

falseを返す必要があります。か否か?

4

2 に答える 2

3

細かいマニュアルから:

hsh == other_hash → true or false

Object#==同等性-2つのハッシュがそれぞれ同じ数のキーを含み、各キーと値のペアが他のハッシュの対応する要素に等しい場合(に従って)、2つのハッシュは等しくなります。

したがって、2つのハッシュは、順序に関係なく同じキー/値のペアを持っている場合、等しいと見なされます。

ドキュメントの例には、次のものも含まれています。

h2 = { 7 => 35, "c" => 2, "a" => 1 }
h3 = { "a" => 1, "c" => 2, 7 => 35 }
h2 == h3   #=> true

はい、test_hash_is_unordered順序は具体的にテストされておらず、平等に関する順序のみが示されているため、タイトルはやや誤解を招く可能性があります。

于 2012-06-09T17:48:22.340 に答える
0

そのような文脈で「順序付けられていない」とはどういう意味かという問題だと思います。

人間として、2つのセットが順番に並んでいない場合、それらを比較するのは非常に難しいと思います。問題は、同じ要素を簡単に一致させて、セットが同等であるかどうかを確認できないことです。セットがたまたま同じ順序でリストされていない限り、私はそれらを等しくないと見なします。これもあなたがたどり着いた結論のようです。

ただし、集合の数学的概念における項目の順序は単純に重要ではありません。アイテムを「並べ替える」方法はないため、同じ要素が含まれている場合、2つのセットは同一です。セットアイテムは順序付けされていませんが、「順不同」ではありません。順序の概念は適用されません。

これは式「hash_is_unordered」に完全にカプセル化されていると思いますが、少なくとも私にはすぐにはわかりませんでした。

于 2015-08-18T07:49:11.713 に答える