wpk*_*kzz 3 arrays dictionary julia
我在Julia上制作了一个直方图字典,里面有很多条目.键是4个元素的整数数组,因为对该对象的简单调用返回:
In[88] Histogramas
Out[88] Dict{Array{Int64,N},Array{T,N}} with 36540 entries:
[56,8,39,55] => [0,2,4,7,19,44,61,76,124,116 … 0,0,0,0,0,0,0,0,0,0]
[64,20,48,55] => [284,368,202,106,35,3,2,0,0,0 … 0,0,0,0,0,0,0,0,0,0]
[54,9,50,54] => [0,0,0,0,0,0,0,0,0,2 … 1,0,0,0,0,0,0,0,0,0]
[37,26,45,61] => [0,6,11,35,47,86,113,133,136,139 … 0,0,0,0,0,0,0,0,0,0]
[37,15,51,50] => [673,272,48,5,2,0,0,0,0,0 … 0,0,0,0,0,0,0,0,0,0]
[35,22,53,45] => [331,370,201,69,25,4,0,0,0,0 … 0,0,0,0,0,0,0,0,0,0]
[37,25,56,40] => [460,382,127,27,3,0,1,0,0,0 … 0,0,0,0,0,0,0,0,0,0]
....
Run Code Online (Sandbox Code Playgroud)
但是,如果我打电话,Histogramas.keys
那么我得到这个非常奇怪的输出:
Out[90] : 65536-element Array{Array{Int64,N},1}:
#undef
#undef
[56,8,39,55]
#undef
[64,20,48,55]
[54,9,50,54]
#undef
[37,26,45,61]
[37,15,51,50]
...
Run Code Online (Sandbox Code Playgroud)
所以我得到了几乎两倍的密钥,因为有字典的条目,而且大多数额外的是#undef
,顺便说一句,我也不知道这意味着什么.¿在什么意义上未定义?
这不是获取Dict
密钥的正确方法- 您不小心访问了Dict
对象的私有内部字段.访问Dict
密钥的正确方法是调用对象keys
上的Dict
函数:
julia> d = Dict(:foo => 1.2, :bar => 2.3, :baz => 3.4)
Dict{Symbol,Float64} with 3 entries:
:bar => 2.3
:baz => 3.4
:foo => 1.2
julia> keys(d)
Base.KeyIterator for a Dict{Symbol,Float64} with 3 entries. Keys:
:bar
:baz
:foo
Run Code Online (Sandbox Code Playgroud)
#undef
显示数组时的输出表示数组中未初始化的条目.这类似于null
C,C++或Java中的值,但不像null
Julia #undef
是非一等的:它不是一个可以使用或传递的值; 任何使用未定义的字段或数组槽都是一个直接的例外.
在一般情况下,Julia是不是一个"点取向的语言":而在Python或Java你可能希望做obj.frob
访问obj
的frob
还是obj.frizzle()
以焦枯obj
,在朱莉娅是不太可能做正确的事情.你最有可能做的frob(obj)
和frizzle(obj)
来代替.