在 Julia 中破坏性地迭代字典是否安全?

问题描述 投票:0回答:1

在 Julia 中破坏性地迭代字典是否安全?

这是一个例子

d = Dict()

for key in keys(d)
    pop!(d, key)
end

重要的是

keys(d)
返回的是迭代器还是集合。 (我想。)

julia> typeof(keys(d))
Base.KeySet{String, Dict{String, Int64}}

根据 此文档页面,看起来

keys()
返回一个迭代器,因此推测
KeySet
是一个迭代器?

这是否意味着以这种方式迭代字典不是一个安全的操作?

从字典中弹出元素通常是您可能期望会使迭代器无效的操作。

dictionary julia
1个回答
0
投票

因为通常的 Julia Dict 通过 Dict 键到实际哈希键的底层第二个哈希映射来实现

keys
keys
函数将其作为封装迭代器的迭代器进行迭代,所以您的代码是安全的。

但请注意,如果您在 for 循环中添加一个项目,则迭代是否会迭代新项目是不确定的,因为这可能基于底层哈希值。

© www.soinside.com 2019 - 2024. All rights reserved.