2017-10-27 1 views
3

튜플 배열을 갖고 싶습니다. 그러나 그것은 그것에 튜플을 추가 할 수없는 것 같습니다. 다음은 오류를 발생시키는 최소한의 코드 예제입니다.줄리아 : 배열에 튜플을 추가 할 수 없습니다.

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)이 두 개의 정수로 구성된 집합이며 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에 설명된다.

+0

OMG! 정말 고맙습니다. 나는 미쳐 가고 있었다. – tst

관련 문제