在 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
是一个迭代器?
这是否意味着以这种方式迭代字典不是一个安全的操作?
从字典中弹出元素通常是您可能期望会使迭代器无效的操作。
因为通常的 Julia Dict 通过 Dict 键到实际哈希键的底层第二个哈希映射来实现
keys
,keys
函数将其作为封装迭代器的迭代器进行迭代,所以您的代码是安全的。
但请注意,如果您在 for 循环中添加一个项目,则迭代是否会迭代新项目是不确定的,因为这可能基于底层哈希值。