首页 > 解决方案 > 在 Julia 中使用数组键进行字典

问题描述

在 julia 语言(ver 1.1.0)中,我正在试验当我改变字典键时会发生什么。

在突变之前,变量x[1,2,3]都被识别。

x = [1,2,3]; d = Dict(x=>"x")
haskey(d, x)
# true

haskey(d, [1,2,3])
# true

一旦我 mutate x,变量x也不会[1,2,3,4]被识别。

push!(x, 4)
haskey(d, x)
# false

haskey(d, [1,2,3,4])
# false

haskey(d, [1,2,3])
# false

价值方面,关键是“等于” x,所以我猜这与哈希函数有关,但无法理解源代码

collect(keys(d))[1] == x == [1,2,3,4]
# true

有人可以解释导致这种行为的原因,或者建议我应该查看的资源吗?

标签: dictionaryjulia

解决方案


要研究的关键功能是ht_keyindex.

在那里你可以看到,为了找到密钥,它必须同时:

有一个不可忽略的概率,在变异后x它将具有相同的hashindex值并且会找到密钥。例如,在这里您可以将 index 4 of 设置x为 5 并且所有似乎都可以工作:

julia> x[4] = 5
5

julia> x
4-element Array{Int64,1}:
 1
 2
 3
 5

julia> haskey(d, x)
true

因此 - 与任何以类似方式支持字典的编程语言一样 - 不应该更改字典的键。上述讨论实际上应该只是理论上的讨论。


推荐阅读