Julia 言語のタプル (Core.Tuple) は、順序と名前を持たないコレクションです。配列や集合など他のコレクションとの違いや、タプルの使い方をご紹介します。
Core.Tuple はコレクションの一種である。Julia 言語には、以下に示すコレクションがある。
コレクション | 順序 | 名前 | 値の重複 | 要素の追加・変更 |
---|---|---|---|---|
Core.Array | ✓ | ✗ | ✓ | ✓ |
Core.NamedTuple | ✓ | ✓ | ✓ | ✗ |
Core.Tuple | ✓ | ✗ | ✓ | ✗ |
Base.Dict | ✗ | ✓ | ✓ | ✓ |
Base.Matrix | ✓ | ✗ | ✓ | ✓ |
Base.Set | ✗ | ✗ | ✗ | ✗ |
Base.Vector | ✓ | ✗ | ✓ | ✓ |
Core.Tuple は以下に示す特徴を持つ。
上記の特徴を持つコレクションは、一般的に「タプル」と呼ばれる。
タプルの生成方法を以下に示す。
julia> x = (1, 2.0, "foo")
(1, 2.0, "foo")
Core.Tuple の値は、1 から始まる番号を指定して参照できる。
julia> x = (1, 2.0, "foo")
(1, 2.0, "foo")
julia> x[1]
1
julia> for i = 1:3
println(x[i])
end
1
2.0
foo
Core.Tuple は先頭から順に値を取り出すことができる。
julia> x = (1, 2.0, "foo")
(1, 2.0, "foo")
julia> for i in x
println(i)
end
1
2.0
foo
タプルには順序性があるので、常に上記の順番で値を取り出せる。
タプルの値を変更することはできない。
julia> x = (1, 2)
(1, 2)
julia> x[1] = 0
ERROR: MethodError: no method matching setindex!(::Tuple{Int64, Int64}, ::Int64, ::Int64)
タプルに値を追加することはできない。
julia> x = (1, 2)
(1, 2)
julia> x[3] = 3
ERROR: MethodError: no method matching setindex!(::Tuple{Int64, Int64}, ::Int64, ::Int64)
タプルを使って、2つの値を交換できる。
julia> x = 1
1
julia> y = 2
2
julia> x,y = y,x
(2, 1)
julia> x
2
julia> y
1
同様にして、3つ以上の値を交換することもできる。
Core.tuple 関数を使ってタプルを生成することができる。
julia> t = tuple(1, 2, 3)
(1, 2, 3)
Core.typeof 関数を使って、タプル内の要素の型を確認できる。
julia> x = (1, 2.0, "foo")
(1, 2.0, "foo")
julia> typeof(x)
Tuple{Int64,Float64,String}
Base.collect メソッドを使って、Core.Tuple を Base.Vector へ変換することができる。
julia> t = (1, 2, 3)
(1, 2, 3)
julia> v = collect(t)
3-element Vector{Int64}:
1
2
3
Base.empty! 関数を使って、タプルの要素を空にすることはできない。
julia> x = (1, 2, 3)
(1, 2, 3)
julia> empty!(x)
ERROR: MethodError: no method matching empty!(::Tuple{Int64, Int64, Int64})
Base.findall メソッドを使うことで、Core.Tuple に含まれる true の要素だけを抽出することができる。
julia> t = (true, false, true)
(true, false, true)
julia> findall(t)
2-element Vector{Int64}:
1
3
Base.findall メソッドを使うことで、Core.Tuple に含まれる要素のうち、引数に渡した関数の戻り値が true になる要素だけを抽出することができる。
julia> t = (5, 6, 7, 8)
(5, 6, 7, 8)
julia> findall(isodd, t)
2-element Vector{Int64}:
1
3
julia> findall(iseven, t)
2-element Vector{Int64}:
2
4
Base.isempty 関数を使って、タプルが空かどうかを確認できる。
julia> x = (1)
1
julia> isempty(x)
false
julia> x = ()
()
julia> isempty(x)
true
Base.length 関数を使って、タプルの要素数を確認できる。
julia> x = (1, 2.0, "foo")
(1, 2.0, "foo")
julia> length(x)
3
Base.sort 関数を使って、Core.Tuple をソート(並び替え)することはできない。
julia> t = (3,2,1)
(3, 2, 1)
julia> sort(t)
ERROR: MethodError: no method matching sort(::Tuple{Int64, Int64, Int64})
Base.sum 関数を使って、Core.Tuple 各要素の合計値を求めることができる。
julia> sum((1, 2, 3))
6
JuliaLang.org contributors 2023. Julia Documentation