在 Julia 中键入数组元素的逻辑是什么

ait*_*ora 4 arrays types julia

我想在 Julia 中使用一组整数集,但是当我查看每个元素的类型时,它不是一个 Set,为什么?

typeof(fill(Set{Int64}[],3)[2])
Run Code Online (Sandbox Code Playgroud)

返回

 Array{Set{Int64},1}
Run Code Online (Sandbox Code Playgroud)

并不是

 Set{Int64}
Run Code Online (Sandbox Code Playgroud)

例如,如果我使用原始类型,

 typeof([1,2][1]) # returns Int64
Run Code Online (Sandbox Code Playgroud)

 typeof([Set{Int64}[],Set{Int64}[]][1]) # returns Array{Set{Int64},1}
Run Code Online (Sandbox Code Playgroud)

为什么有一个包含 Set{Int64} 的数组

Lyn*_*ite 5

你写了 typeof(fill(Set{Int64}[],3)[2])

Set{Int}[]是另一种写法Vector{Set{Int}}。通常这种方式在使用非空数组构造时更有意义,例如Int128[1,2,3]

你可能想买Set{Int}()一套。查看typeof(fill(Set{Int64}(), 3)[2])

但是,这将使用对同一集合的 3 个引用填充数组。因此,变异一个将使它们全部变异。很少有你想要的。

可能你真正想要的是: [Set{Int}() for _ in 1:3]

  • 谢谢,我错误地使用了 Set 构造函数。你也是对的,说引用将使用 fill 共享,如下例所示: ```z=fill(Set{Int64}(),2); 推!(z[1],2); z # 返回 2 元素数组{Set{Int64},1}: Set([2]) Set([2]) `` (2认同)