朱莉娅:无法将元组附加到数组

时间:2017-10-27 20:48:38

标签: arrays tuples julia

我想要一组元组。但似乎我不能附加一个元组。这是一个引发错误的最小代码示例。

julia> a = [(1,1),(2,2)]
2-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)

julia> append!(a, (3,3) )
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Tuple{Int64,Int64}
This may have arisen from a call to the constructor Tuple{Int64,Int64}(...),
since type constructors fall back to convert methods.
Stacktrace:
 [1] _append!(::Array{Tuple{Int64,Int64},1}, ::Base.HasLength, ::Tuple{Int64,Int64}) at ./array.jl:644
 [2] append!(::Array{Tuple{Int64,Int64},1}, ::Tuple{Int64,Int64}) at ./array.jl:637

我的语法有问题吗?我不明白为什么它抱怨它必须将数字转换为元组。是什么给了什么?

1 个答案:

答案 0 :(得分:7)

append!将另一个集合的所有单个元素添加到现有对象中。 Julia在此处引发错误,因为(3, 3)是两个整数的集合,它无法将类型为Int64的单个整数与数组的Tuple{Int64,Int64}类型进行协调。

您需要的方法是push!,它会将一个或多个单独的项目添加到现有集合中:

julia> push!(a, (3, 3))
3-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)
 (3, 3)

单个项目元组(3, 3)已成功推送到数组a

要使用append!完成相同的任务,元组需要包含在某种类型的集合中,例如数组:

julia> append!(a, [(4, 4)])
4-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)
 (3, 3)
 (4, 4)

这在档案页面here上有记录。