【发布时间】:2018-07-01 13:11:06
【问题描述】:
哈希按照插入相应键的顺序枚举它们的值。
Set 实现了一组无重复的无序值。
我认为 set 在 ruby 中实现为 Hash。那为什么 Set 是无序的,而 Hash 是按插入顺序保证的呢?
更新:
我知道数学上的集合应该是无序的。
出现了一个重要的问题,尽管 Set 类实际上是按插入顺序排列的,但它没有记录在案。我认为应该更新文档。
即使在Set#add 源中,我们也可以看到它实际上是在使用Hash:
# File set.rb, line 348
def add(o)
@hash[o] = true
self
end
注意:我并不是要引发讨论,但我认为在某处记录这一事实很重要。如果不在官方文档中,至少在堆栈溢出时。
【问题讨论】:
-
集合是用散列实现的这一事实是无关紧要的。问题仅仅是集合是否应该保留插入顺序。赞成的论点之一是它可以有效地完成,因为集合在幕后使用哈希,但这不是核心问题。至于“为什么”集合不保留插入顺序,您将不得不询问 Ruby 僧侣。显然,他们并没有被说服这样的改变是可取的。由于问题需要意见,因此它并不适合 SO。 (点击SO help“询问”下的第 2 点。)
标签: ruby