Julia言語のBase.Dictコレクションで連想配列を扱うことができます。キーと値の組合せを持つデータのコレクションであり、インデックス(数値)ではなく、名前でデータを識別できます。
JuliaにおけるDictとは、キーと値の組み合わせを持つデータのコレクションである。キーは重複せず、一意となる。いわゆる連想配列である。
Base.Dict はコレクションの一種である。Julia 言語には、以下に示すコレクションがある。
コレクション | 順序 | 名前 | 値の重複 | 要素の追加・変更 |
---|---|---|---|---|
Core.Array | ✓ | ✗ | ✓ | ✓ |
Core.NamedTuple | ✓ | ✓ | ✓ | ✗ |
Core.Tuple | ✓ | ✗ | ✓ | ✗ |
Base.Dict | ✗ | ✓ | ✓ | ✓ |
Base.Matrix | ✓ | ✗ | ✓ | ✓ |
Base.Set | ✗ | ✗ | ✗ | ✗ |
Base.Vector | ✓ | ✗ | ✓ | ✓ |
Base.Dict は以下に示す特徴を持つ。
上記の特徴を持つコレクションは、一般的に「辞書」又は「連想配列」と呼ばれる。
Dict([itr])
Dictを作成するには、キーと値のペアを指定する。
julia> d = Dict("GOOG" => 2868.12, "AMZN" => 3450.00, "FB" => 376.53)
Dict{String, Float64} with 3 entries:
"AMZN" => 3450.0
"FB" => 376.53
"GOOG" => 2868.12
キー | 値 |
---|---|
GOOG | 2868.12 |
AMZN | 3450.00 |
FB | 376.53 |
キーが文字列の場合は、シンボルとして指定することができる。
julia> d = Dict(:GOOG => 2868.12, :AMZN => 3450.00, :FB => 376.53)
Dict{Symbol, Float64} with 3 entries:
:FB => 376.53
:GOOG => 2868.12
:AMZN => 3450.0
キーと値の型を明示的に指定することもできる。
julia> d = Dict{String, Float32}("GOOG" => 2868.12, "AMZN" => 3450.00, "FB" => 376.53)
キー String |
値 Float32 |
---|---|
GOOG | 2868.12 |
AMZN | 3450.00 |
FB | 376.53 |
Dictのイテレーションでは、キーと値を取り出すことができる。
x = Dict("a" => 1, "b" => 2)
for (key, value) in x
println(key)
end
JuliaのDictに順序性は無いため、どのような順番で取り出せるかは保証されていない。もしアルファベット順に並べたいのであれば、明示的にソートする必要がある。
Dictにキーと値を追加するには、次のようにする。
julia> d = Dict("foo" => 1)
Dict{String, Int64} with 1 entry:
"foo" => 1
julia> d["bar"] = 2
2
julia> d
Dict{String, Int64} with 2 entries:
"bar" => 2
"foo" => 1
Dict の値は変更できる。
julia> d = Dict("foo" => 1)
Dict{String, Int64} with 1 entry:
"foo" => 1
julia> d["foo"] = 2
2
julia> d
Dict{String, Int64} with 1 entry:
"foo" => 2
辞書はジェネレータを使って作成することもできる。
Dict(i => f(i) for i = 1:10)
辞書に特定のキーに対するマッピングがあるかどうかを確認できる。
d = Dict('foo'=>2 'bar'=>3)
if haskey(d, 'foo')
println(get(d, 'foo', 0))
end
Base.delete! 関数を使用して、辞書 (Base.Dict) から要素を削除することができる。
julia> d = Dict("foo" => 1, "bar" => 2)
Dict{String, Int64} with 2 entries:
"bar" => 2
"foo" => 1
julia> delete!(d, "foo")
Dict{String, Int64} with 1 entry:
"bar" => 2
Base.findall メソッドを使うことで、Base.Dict に含まれる要素のうち、引数に渡した関数の戻り値が true になる要素だけを抽出することができる。
julia> d = Dict(:a => -1, :b => 0, :c => 1)
Dict{Symbol, Int64} with 3 entries:
:a => -1
:b => 0
:c => 1
julia> findall(x -> x >= 0, d)
2-element Vector{Symbol}:
:b
:c
Base.haskey 関数を使って、辞書 (Base.Dict) に指定したキーが含まれるかどうかを調べることができる。
julia> x = Dict("a" => 1)
Dict{String,Int64} with 1 entry:
"a" => 1
julia> haskey(x, "a")
true
julia> haskey(x, "b")
false
Base.merge 関数を使って、複数の辞書 (Base.Dict) をマージ(併合)することができる。
julia> a = Dict("foo" => 1)
Dict{String, Int64} with 1 entry:
"foo" => 1
julia> b = Dict("bar" => 2)
Dict{String, Int64} with 1 entry:
"bar" => 2
julia> c = Dict("baz" => 3)
Dict{String, Int64} with 1 entry:
"baz" => 3
julia> merge(a, b, c)
Dict{String, Int64} with 3 entries:
"bar" => 2
"baz" => 3
"foo" => 1
Base.pop! 関数を使って、辞書 (Base.Dict) から要素を取り出すことができる。
julia> d = Dict("foo" => 1, "bar" => 2)
Dict{String, Int64} with 2 entries:
"bar" => 2
"foo" => 1
julia> pop!(d, "foo")
1
julia> d
Dict{String, Int64} with 1 entry:
"bar" => 2
Base.sum 関数を使って、Base.Dict 各要素の合計値を求めることはできない。
julia> d = Dict("x" => 1, "y" => 2, "z" => 3)
Dict{String, Int64} with 3 entries:
"x" => 1
"z" => 3
"y" => 2
julia> sum(d)
ERROR: MethodError: no method matching +(::Pair{String, Int64}, ::Pair{String, Int64})
JuliaLang.org contributors 2023. Julia Documentation