Julia 辞書と集合
前のいくつかの章で学びましたJulia 配列とjulia タプル。
配列は集合の一種ですが、その他にも Julia には辞書や set(順序のない集合リスト)などの他の種類の集合があります。
辞書
辞書は可変なコンテナモデルであり、任意の型のオブジェクトを格納できます。
辞書の各キーと値key=>valueペアを=>区切り、各キーと値のペア間はカンマで,区切り、辞書全体は波括弧で囲みます{}の中に、形式は次の通りです:
辞書の作成
辞書を作成する構文は次の通りです:Dict("key1" => value1, "key2" => value2,,…, "keyn" => valuen)
次の例では、キー A に対応する値が 1、キー B に対応する値が 2 の単純な辞書を作成します:
Dict("A"=>1, "B"=>2)
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia>
for を使って辞書を作成します:
実例
Dict{String, Float64} with 73 entries:
"285" => -0.965926
"310" => -0.766044
"245" => -0.906308
"320" => -0.642788
"350" => -0.173648
"20" => 0.34202
"65" => 0.906308
"325" => -0.573576
"155" => 0.422618
"80" => 0.984808
"335" => -0.422618
"125" => 0.819152
"360" => 0.0
"75" => 0.965926
"110" => 0.939693
"185" => -0.0871557
"70" => 0.939693
"50" => 0.766044
"190" => -0.173648
⋮ => ⋮
キー(Key)
辞書のキーは一意です。既存のキーに値を割り当てると、新しいキーは作成されず、既存のキーが変更されます。
key を検索
haskey() 関数を使用して、辞書に指定された key が含まれているかどうかを確認できます:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> haskey(first_dict, "A")
false
julia> haskey(D, "A")
true
julia> haskey(D, "Z")
false
また、次を使用することもできますin()辞書に次のものが含まれているかどうかを確認する関数キー/値ペア:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> in(("A" => 1), D)
true
julia> in(("X" => 220), first_dict)
false
key/value ペアの追加
既存の辞書に新しい key/value ペアを追加できます。次のようにします:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> D["C"] = 3
3
julia> D
Dict{String, Int64} with 3 entries:
"B" => 2
"A" => 1
"C" => 3
key/value ペアの削除
私たちは使用できますdelete!()関数を使用して既存の辞書の key を削除します:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
辞書内のすべての key を取得する
私たちは使用できますkeys()関数を使用して辞書内のすべての key を取得します:
実例
KeySet for a Dict{String, Int64} with 2 entries. Keys:
"B"
"A"
julia>
値(Value)
辞書の各キーには対応する値があります。
辞書のすべての値を表示
私たちは使用できますvalues()辞書のすべての値を表示します:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> values(D)
ValueIterator for a Dict{String, Int64} with 2 entries. Values:
2
1
julia>
辞書を反復可能オブジェクトとして
辞書を反復可能オブジェクトとして使用して、キー/値ペアを表示できます:
実例
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> for kv in D
println(kv)
end
"B" => 2
"A" => 1
実例ではkv各キー/値ペアを含むタプルです。
辞書のソート
辞書は順序付けられていませんが、sort() 関数を使用して辞書をソートできます:
実例
Dict{String, Int64} with 6 entries:
"S" => 220
"U" => 400
"T" => 350
"W" => 670
"V" => 575
"R" => 100
julia> for key in sort(collect(keys(サンプル_dict)))
println("$key => $(サンプル_dict[key])")
end
R => 100
S => 220
T => 350
U => 400
V => 575
W => 670
DataStructures.ji パッケージの SortedDict データ型を使用すると、辞書を常にソートされた状態に保つことができます。
DataStructures パッケージを使用するには、まずそれをインストールする必要があります。REPL の Pkg モードで、add コマンドを使用して SortedDict を追加できます。
REPL に記号を入力します]、入りますpkgモード。
pkg モードに入る
パッケージ追加の構文形式:
add 包名
以下で DataStructures パッケージを追加すると、以降の実例は正常に実行できます:
(@v1.7) pkg> add DataStructures未登録のパッケージは、url を直接指定できます:
add https://github.com/fredrikekre/ImportMacros.jl
ローカルパッケージ:
add 本地路径/包名.jl
実例
julia> サンプル_dict = DataStructures.SortedDict("S" => 220, "T" => 350, "U" => 400, "V" => 575, "W" => 670)
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 5 entries:
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
julia> サンプル_dict["R"] = 100
100
julia> サンプル_dict
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 6 entries:
"R" => 100
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
Set(集合)
Julia Set(集合)は重複のないオブジェクトデータセットであり、すべての要素は一意です。以下は、set と他の種類の集合との違いです:
- set 内の要素は一意です
- set 内の要素の順序は重要ではありません
set は重複のないリストを作成するために使用されます。
Set(集合)の作成
Set コンストラクタを使用して、次のような集合を作成できます:
実例
Set{Any}()
julia> num_primes = Set{Int64}()
Set{Int64}()
julia> var_site = Set{String}(["Google","サンプル","Taobao"])
Set{String} with 3 elements:
"Google"
"Taobao"
"サンプル"
私たちは使用できますpush!()関数を使用して集合要素を追加します。次のようになります:
実例
Set{String} with 4 elements:
"Google"
"Wiki"
"Taobao"
"サンプル"
私たちは使用できますin()関数を使用して、要素が集合内に存在するかどうかを確認します:
実例
true
julia> in("Zhihu", var_site)
false
よく使う操作
和集合、積集合、差集合は集合に対してよく使う操作であり、これらの操作に対応する関数はunion()、intersect()とsetdiff()。

和集合
2つの集合 A と B のすべての要素を1つにまとめて構成される集合を、集合 A と集合 B の和集合と呼びます。実例
Set{String} with 4 elements:
"blue"
"green"
"black"
"red"
julia> B = Set(["red","orange","yellow","green","blue","indigo","violet"])
Set{String} with 7 elements:
"indigo"
"yellow"
"orange"
"blue"
"violet"
"green"
"red"
julia> union(A, B)
Set{String} with 8 elements:
"indigo"
"green"
"black"
"yellow"
"orange"
"blue"
"violet"
"red"
積集合
集合 A と B の積集合は、A にも B にも属するすべての要素を含み、他の要素を含まない集合です。
実例
Set{String} with 3 elements:
"blue"
"green"
"red"
差集合
集合 A と B の差集合は、A に属するが B には属さないすべての要素を含む集合、つまり B と A が重複する要素を取り除いたものです。
実例
Set{String} with 1 element:
"black"
辞書と集合のよく使う関数の実例
以下の実例では、辞書でよく使う関数を示していますが、集合でも同様に適用できます:
2つの辞書 dict1 と dict2 を作成します:
実例
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> dict2 = Dict(220 => "Y", 300 => "Z", 450 => "W")
Dict{Int64,String} with 3 entries:
450 => "W"
220 => "Y"
300 => "Z"
辞書の和集合:
実例
4-element Array{Pair{Int64,String},1}:
100 => "X"
220 => "Y"
450 => "W"
300 => "Z"
Intersect
julia> intersect(dict1, dict2)
1-element Array{Pair{Int64,String},1}:
220 => "Y"
辞書の差集合:
実例
1-element Array{Pair{Int64,String},1}:
100 => "X"
辞書のマージ:
実例
Dict{Int64,String} with 4 entries:
100 => "X"
450 => "W"
220 => "Y"
300 => "Z"
辞書内の最小値を表示:
実例
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> findmin(dict1)
("X", 100)