Julia Sets 和 Dicts 的顺序是否保证跨会话、平台和版本稳定?

Min*_*ark 4 julia

我尝试在 MacOSX 和 Linux 上的多个 Julia REPL 会话中运行以下代码,并且输出始终完全相同(以相同的顺序):

julia> (Set([1, 2, 3, 4]), Dict(1=>2, 3=>4, 5=>6))
(Set([4, 2, 3, 1]), Dict(3 => 4,5 => 6,1 => 2))
Run Code Online (Sandbox Code Playgroud)

问题:这种行为是否由语言、会话、平台和版本以及所有基于哈希的集合保证?

笔记:

  • 我知道输出顺序可能会因插入顺序而异,尤其是在存在哈希冲突的情况下。我的问题假设插入顺序是恒定的。
  • 这个问题与我关于函数本身稳定性的另一个问题有关hash()(它密切相关,但又不同)。

And*_*kin 5

不,这是内部实现的一部分,与内部事物一样,开发人员不保证订单行为在各种平台和版本中都相同。

同时,如果你想要有保证的顺序SetDict结构,你可以使用OrderedCollections.jlDictionaries.jl来保留顺序。关于字典,你也可以阅读这个这个主题,因为它们除了顺序保存之外还有其他不错的功能。