朱莉娅与数组键的字典

时间:2019-02-17 17:03:54

标签: dictionary julia

在julia语言(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

一旦我突变了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的键,所以我想这与哈希函数有关,但无法理解source code

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

有人可以解释造成这种现象的原因,还是建议我应该看看的资源?

1 个答案:

答案 0 :(得分:2)

要研究的关键功能是ht_keyindex

您可以看到,要找到该密钥,必须同时进行以下操作:

在将x进行突变后,它具有相同的hashindex值并找到了密钥的可能性是不可忽略的。例如,您可以在此处将x的索引4设置为5,所有这些似乎都可以工作:

julia> x[4] = 5
5

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

julia> haskey(d, x)
true

因此-像任何支持字典的编程语言一样,都不应该对字典的键进行更改。以上讨论实际上仅是理论上的讨论。