Julia Core.NamedTuple

Julia 言語の名前付きタプル (Core.NamedTuple) は、名前と順序を持つコレクションです。配列や集合など他のコレクションとの違いや、名前付きタプルの使い方をご紹介します。

目次

  1. コレクション
  2. 名前付きタプルの作成
  3. 要素の参照
  4. イテレーション
  5. 値の変更
  6. 値の追加
  7. Core.typeof
  8. Base.empty!
  9. Base.findall
  10. Base.isempty
  11. Base.length
  12. Base.sum
  13. 参考文献

1 コレクション

Core.NamedTuple はコレクションの一種である。Julia 言語には、以下に示すコレクションがある。

Juliaのコレクション
コレクション 順序 名前 値の重複 要素の追加・変更
Core.Array
Core.NamedTuple
Core.Tuple
Base.Dict
Base.Matrix
Base.Set
Base.Vector

Core.NamedTuple は以下に示す特徴を持つ。

上記の特徴を持つコレクションは、一般的に「名前付きタプル」と呼ばれる。

2 名前付きタプルの作成

名前付きタプルの生成方法を以下に示す。

julia> x = (a = 1, b = 2.0, c = "foo")
(a = 1, b = 2.0, c = "foo")

3 要素の参照

Core.NamedTuple の値は、1 から始まる番号又は名前を指定して参照できる。

julia> x = (a = 1, b = 2.0, c = "foo")
(a = 1, b = 2.0, c = "foo")

julia> x[1]
1

julia> x.b
2.0

julia> x[:c]
"foo"

4 イテレーション

Core.NamedTuple は先頭から順に値を取り出すことができる。

julia> x = (a = 1, b = 2.0, c = "foo")
(a = 1, b = 2.0, c = "foo")

julia> for i in x
         println(i)
       end
1
2.0
foo

Core.NamedTuple のイテレーションで取り出せるのは値だけであり、名前は取り出せない。名前と値のペアを取り出したい場合は、Base.pairs 関数を使う。

julia> x = (a = 1, b = 2, c = 3)
(a = 1, b = 2, c = 3)

julia> for i in pairs(x)
         println(i)
       end
:a => 1
:b => 2
:c => 3

5 値の変更

名前付きタプルの値を変更することはできない。

julia> x = (a = 1, b = 2)
(a = 1, b = 2)

julia> x.a = 0
ERROR: setfield!: immutable struct of type NamedTuple cannot be changed

6 値の追加

名前付きタプルに値を追加することはできない。

julia> x = (a = 1, b = 2)
(a = 1, b = 2)

julia> x.c = 0
ERROR: type NamedTuple has no field c

7 Core.typeof

Core.typeof 関数を使って、名前付きタプル内の要素の型を確認できる。

julia> x = (a = 1, b = 2.0, c = "foo")
(a = 1, b = 2.0, c = "foo")

julia> typeof(x)
NamedTuple{(:a, :b, :c),Tuple{Int64,Float64,String}}

8 Base.empty!

Base.empty! 関数を使って、名前付きタプルの要素を空にすることはできない。

julia> x = (a = 1)
1

julia> empty!(x)
ERROR: MethodError: no method matching empty!(::Int64)

9 Base.findall

Base.findall メソッドを使うことで、Core.NamedTuple に含まれる true の要素だけを抽出することができる。

julia> nt = (a = true, b = false)
(a = true, b = false)

julia> findall(nt)
1-element Vector{Symbol}:
 :a

Base.findall メソッドを使うことで、Core.NamedTuple に含まれる要素のうち、引数に渡した関数の戻り値が true になる要素だけを抽出することができる。

julia> nt = (a = 1, b = 2, c = 3, d = 4)
(a = 1, b = 2, c = 3, d = 4)

julia> findall(isodd, nt)
2-element Vector{Symbol}:
 :a
 :c

julia> findall(iseven, nt)
2-element Vector{Symbol}:
 :b
 :d

10 Base.isempty

Base.isempty 関数を使って、名前付きタプルが空かどうかを確認できる。

julia> x = (a = 1, b = 2)
(a = 1, b = 2)

julia> isempty(x)
false

11 Base.length

Base.length 関数を使って、名前付きタプルの要素数を確認できる。

julia> x = (a = 1, b = 2, c = 3)
(a = 1, b = 2, c = 3)

julia> length(x)
3

12 Base.sum

Base.sum 関数を使って、Core.NamedTuple 各要素の合計値を求めることができる。

julia> sum((x = 1, y = 2, z = 3))
6

13 参考文献

JuliaLang.org contributors 2023. Julia Documentation