2017-10-27 24 views
3

タプルの配列を持っていたいと思います。しかし、私はそれにタプルを追加することはできないようです。ここでは、エラーを発生させる最小限のコード例を示します。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 

構文に問題がありますか?なぜ私はそれが数字をタプルに変換しなければならないと不平を言うのか分からない。何がありますか?

答えて

8

append!は、別のコレクションのすべての個々の要素を既存のオブジェクトに追加します。 (3, 3)は2つの整数の集合であり、タイプInt64の個々の整数と配列のTuple{Int64,Int64}タイプを一致させることができないため、Juliaはエラーを発生させます。

必要な方法は、既存のコレクションに1つの以上の個々の項目を追加しますこれ、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に記載されています。

+0

OMG!どうもありがとうございます。私は夢中になっていた – tst

関連する問題