Ruby koans对test_hash_is_unordered的断言

问题描述 投票:0回答:2

在Ruby 1.9中,哈希是根据插入顺序排序的。为什么Ruby koans对test_hash_is_unordered方法的断言返回true?

对我来说,方法的标题是非常误导的...也许它指的是Ruby将识别使用不同键顺序创建的2个相等的哈希值。

但是,理论上,这种断言:

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

assert_equal ___, hash1 == hash2

应该返回false。或不?

ruby hash
2个回答
3
投票

来自fine manual

hsh == other_hash → true or false

等式 - 如果它们各自包含相同数量的键并且每个键值对等于(根据Object#==)另一个散列中的对应元素,则两个散列是相等的。

因此,如果两个哈希值具有相同的键/值对,则认为它们是相等的。

文档中的示例甚至包含:

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

是的,test_hash_is_unordered标题有点误导,因为订单没有专门测试,只有关于平等的订单才被证明。


0
投票

我认为这只是一个“无序”在这种背景下意味着什么的问题。

作为一个人,如果它们不合适,我会发现很难比较两组。问题是我无法轻易匹配相同的元素并查看集合是否相同。除非这些集合恰好以相同的顺序列出,否则我认为它们是不相等的。这似乎是你来的结论。

然而,事实是,集合的数学概念中的项目顺序简直不重要。没有办法“订购”这些项目,因此如果它们包含相同的元素,则两个集合是相同的。设定项目是无序的,但它们不是“乱序”;订单的概念不适用。

我认为这完全封装在表达式'hash_is_unordered'中,但至少对我来说并不是很明显!

© www.soinside.com 2019 - 2024. All rights reserved.