朱莉娅:在n元组设置索引

时间:2019-02-02 21:09:51

标签: julia

比方说,我有一个n元组与Int64的4项uninitiallized。如何分别设置每个索引的值? 我尝试了base的setindex函数,但是没有用。有想法吗?

T = NTuple{4,Int64}
setindex(T,9,2) # set T(2) to 9

1 个答案:

答案 0 :(得分:3)

您可能是说NTuple{4, Int64}不是Ntuple{4, Int64}

NTuple是表示具有单个类型元素的类型元组的紧凑方法(不是实际值,而是它们的类型;这里可能令人困惑的是,NTuple{4, Int64}从技术上来说也是一个值可以绑定到变量,但这并不是您可能要执行的操作)。

您可以通过它查找帮助检查。在您的情况下,它表示长度为4的元组的类型,类型为Int64的所有元素。例如(1,2,3,4)是这样的元组。您可以通过编写(1,2,3,4) isa NTuple{4, Int64}来进行检查,其结果将为true

现在,如果您问为什么像(1,2,3,4)这样的元组不支持setindex!的原因是在Julia中元组是不可变的,请参见https://docs.julialang.org/en/latest/manual/types/#Tuple-Types-1。这意味着必须在构造元组的每个字段时为其分配一个值,并且该字段不能被突变。

如果要使用可变容器,则可能应该考虑使用向量而不是元组。例如:

julia> x = Vector{Int}(undef, 4)
4-element Array{Int64,1}:
 0
 0
 0
 0

julia> x[2] = 9
9

julia> x
4-element Array{Int64,1}:
 0
 9
 0
 0