我想创建一个空的 lsit 并逐渐用元组填充它。我已尝试以下操作,但每个操作都返回错误。我的问题是:如何向空数组追加或添加元素?
我的尝试:
A = []
A.append((2,5)) # return Error type Array has no field append
append(A, (2,5)) # ERROR: UndefVarError: append not defined
B = Vector{Tuple{String, String}}
# same error occues
Run Code Online (Sandbox Code Playgroud)
您实际上不想追加,而是想将元素推入向量中。为此,请使用该函数push!(尾随!表示该函数修改其输入参数之一。这只是一种命名约定,!不执行任何操作)。
我还建议创建一个类型化向量而不是A = [],它的Vector{Any}性能较差。
julia> A = Tuple{Int, Int}[]
Tuple{Int64, Int64}[]
julia> push!(A, (2,3))
1-element Vector{Tuple{Int64, Int64}}:
(2, 3)
julia> push!(A, (11,3))
2-element Vector{Tuple{Int64, Int64}}:
(2, 3)
(11, 3)
Run Code Online (Sandbox Code Playgroud)
对于字符串元组向量,请执行以下操作:
julia> B = Tuple{String, String}[]
Tuple{String, String}[]
julia> push!(B, ("hi", "bye"))
1-element Vector{Tuple{String, String}}:
("hi", "bye")
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您的代码中的这一行是错误的:
B = Vector{Tuple{String, String}}
Run Code Online (Sandbox Code Playgroud)
它不创建向量,而是创建类型变量。要创建实例,您可以编写以下内容之一:
B = Tuple{String, String}[]
B = Vector{Tuple{String,String}}() # <- parens necessary to construct an instance
Run Code Online (Sandbox Code Playgroud)
使用符号也可以很方便NTuple:
julia> NTuple{2, String} === Tuple{String, String}
true
julia> NTuple{3, String} === Tuple{String, String, String}
true
Run Code Online (Sandbox Code Playgroud)