代码之家  ›  专栏  ›  技术社区  ›  Kota Mori

julia中带有数组键的Dict

  •  1
  • Kota Mori  · 技术社区  · 7 年前

    在julia language(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
    

    一旦我变异 十、 ,两者都不是变量 十、 也没有 [1,2,3,4] 是公认的。

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

    就价值而言,关键在于“平等” 十、 ,所以我猜这与哈希函数有关,但我无法理解 source code .

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

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

    0 回复  |  直到 7 年前
        1
  •  3
  •   Bogumił Kamiński    7 年前

    要研究的关键功能是 ht_keyindex .

    在这里,您可以看到,为了找到密钥,必须同时满足以下两个条件:

    变异后 x 它也会有同样的效果 散列索引 值和密钥将被找到。例如,您可以在这里设置 十、 到5岁,所有这些似乎都会起作用:

    julia> x[4] = 5
    5
    
    julia> x
    4-element Array{Int64,1}:
     1
     2
     3
     5
    
    julia> haskey(d, x)
    true
    

    因此,正如在以类似方式支持字典的任何编程语言中一样,不应该对字典的键进行变异。上述讨论在实践中应该只是一种理论上的讨论。

    推荐文章