dictionary - 在 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
有人可以解释导致这种行为的原因,或者建议我应该查看的资源吗?
解决方案
要研究的关键功能是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
因此 - 与任何以类似方式支持字典的编程语言一样 - 不应该更改字典的键。上述讨论实际上应该只是理论上的讨论。
推荐阅读
- apache-spark - 加入 Dataframe 的相同列后,Drop 功能无法正常工作
- javascript - Referencing classes in other files
- python - 子目录结构破坏了 C++ 扩展构建
- apache-spark - 当我有两个 Spark 流在同一个笔记本中并行运行时,如何使用 saveAsTable 函数?
- python - NameError: name 'K' is not defined
- google-cloud-platform - AWS 类似 GCP 上的帐户链接和合并计费
- ios - 从 Swift 中的 HTTP 请求响应中检索 cookie
- arrays - 在 Julia 中,如何创建一组独特的、空的可变对象?
- r - 如何将包含“0/0”的字符列转换为数字
- javascript - 使用 Chartjs 显示 JSON 数据