【问题标题】:Why does Julia DIct.keys show a power of 2 values为什么 Julia DIct.keys 显示 2 个值的幂
【发布时间】:2017-12-27 00:48:27
【问题描述】:

使用 Julia 0.6.2

当我创建一个包含 10 个项目的字典时,键的数组是 16,显然是四舍五入到 2 的下一个幂。

julia> dk.keys 16-element Array{Int64,1}: 0 4 9 25 100 81 0 0 16 36 64 0 49 0 0 1

当我创建一个有 17 个键的字典时

julia> dkk = Dict(k^2 => "*"^k for k = 1:17)

Dict{Int64,String} 有 17 个条目:

...

julia> dkk.keys
64-element Array{Int64,1}:
          0
          0
        100
          0
        121
         81
          0
          0
         16
          0
          ⋮
 4536409040
 4536409456
         36
        225
        256
          0
          0
 4536409904
          1

为什么是 64 而不是 2 的下一个幂,即 32?

不管怎样,我真的只想要键而不是哈希表。

注意:直接访问字典时,条目数是我所期望的。

julia> dk

Dict{Int64,String} 有 10 个条目:

julia> dkk

Dict{Int64,String} 有 17 个条目:

【问题讨论】:

  • base/dict.js 是定义字典的地方。注意_tableszn = 16
  • .js ?这是在茱莉亚吗?
  • .jl。是的,它在 Julia 中。
  • 好的,@JulianFondren 找到了它:_tablesz(x::Integer) = x < 16 ? 16 : one(x)<<((sizeof(x)<<3)-leading_zeros(x-1))base/dict.jl

标签: dictionary julia


【解决方案1】:

出于某种内部原因,它是 2 的幂(我猜这是由于使用了树或类似的东西,我不知道)。避免直接抓住内部。相反,使用迭代器keys(dk)。如果要将键作为数组,请使用collect(keys(dk))

【讨论】:

  • 好的。说得通。我试过 julia> collect(dk.keys) 它给出了 16 元素 Array{Int64,1}
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多