Julia Base.Dict

Julia言語のBase.Dictコレクションで連想配列を扱うことができます。キーと値の組合せを持つデータのコレクションであり、インデックス(数値)ではなく、名前でデータを識別できます。

JuliaにおけるDictとは、キーと値の組み合わせを持つデータのコレクションである。キーは重複せず、一意となる。いわゆる連想配列である。

目次

  1. コレクション
  2. 辞書の作成
  3. 型を明示的に指定する
  4. イテレーション
  5. 追加
  6. 変更
  7. ジェネレータを使って辞書を生成する
  8. Base.delete!
  9. Base.findall
  10. Base.haskey
  11. Base.merge
  12. Base.pop!
  13. Base.sum
  14. 参考文献

1 コレクション

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

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

Base.Dict は以下に示す特徴を持つ。

上記の特徴を持つコレクションは、一般的に「辞書」又は「連想配列」と呼ばれる。

2 辞書の作成

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
  
Dictの例
キー
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

3 型を明示的に指定する

キーと値の型を明示的に指定することもできる。

julia> d = Dict{String, Float32}("GOOG" => 2868.12, "AMZN" => 3450.00, "FB" => 376.53)
Dictの例
キー
String

Float32
GOOG 2868.12
AMZN 3450.00
FB 376.53

4 イテレーション

Dictのイテレーションでは、キーと値を取り出すことができる。

x = Dict("a" => 1, "b" => 2)

for (key, value) in x
  println(key)
end

JuliaのDictに順序性は無いため、どのような順番で取り出せるかは保証されていない。もしアルファベット順に並べたいのであれば、明示的にソートする必要がある。

5 追加

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

6 変更

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

7 ジェネレータを使って辞書を生成する

辞書はジェネレータを使って作成することもできる。

Dict(i => f(i) for i = 1:10)

辞書に特定のキーに対するマッピングがあるかどうかを確認できる。

d = Dict('foo'=>2 'bar'=>3)

if haskey(d, 'foo')
  println(get(d, 'foo', 0))
end

8 Base.delete!

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

9 Base.findall

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

10 Base.haskey

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

11 Base.merge

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

12 Base.pop!

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

13 Base.sum

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})

14 参考文献

JuliaLang.org contributors 2023. Julia Documentation