集合

集合 の Julia

1個の演習

集合について

Setは、次のような性質を持つ要素の集まりです。

  • 順序を持ちません。
  • 要素は一意なので、重複を追加しようとしても黙って無視されます。
  • 数学の集合でよく使われる演算の多くをサポートします。

Set()コンストラクターで作成します。入力には任意のイテレーターを使えます。

julia> s1 = Set(1:4)
Set{Int64} with 4 elements:
  4
  2
  3
  1

新しい要素はpush!()で追加し(配列と同じです)、delete!()で削除します。

julia> push!(s1, 5)
Set{Int64} with 5 elements:
  5
  4
  2
  3
  1

# Duplicates are ignored
julia> push!(s1, 3)
Set{Int64} with 5 elements:
  5
  4
  2
  3
  1

julia> delete!(s1, 5)
Set{Int64} with 4 elements:
  4
  2
  3
  1

julia> length(s1)  # length counts entries, despite the non-sequential type
4

集合演算

他のいくつかのコレクション型と同じように、inまたは∈演算子で要素が含まれているかを確認できます(記号は\inと入力してからTabキーを押します)。

julia> 3 ∈ s1
true

2つのSetのペアには、次の演算が使えます(演算子記号のショートカットは括弧内に示しています)。

  • union(A, B)またはA ∪ B(\cup): AまたはB、あるいはその両方にあるすべての要素。
  • intersect(A, B)またはA ∩ B(\cap): AとBの両方に共通するすべての要素。
  • setdiff(A, B)(記号なし): AにあってBにない要素。
  • symdiff(A, B)(記号なし): AまたはBのどちらか一方だけにある要素。
  • issubset(A, B)またはA ⊆ B(\subseteq)、B ⊇ A(\supseteq): Aのすべての要素がBにもあるときtrue。
  • issetequal(A, B)(記号なし): AとBがまったく同じ要素を含むときtrue。
  • isdisjoint(A, B)(記号なし): AとBに共通する要素がないとき(つまり積集合が空のとき)true。
s1 = Set(1:4)
s2 = Set(3:6)

julia> s1 ∪ s2  # union
Set{Int64} with 6 elements:
  5
  4
  6
  2
  3
  1

julia> s1 ∩ s2  # intersect
Set{Int64} with 2 elements:
  4
  3
  
julia> setdiff(s1, s2)
Set{Int64} with 2 elements:
  2
  1

julia> symdiff(s1, s2)
Set{Int64} with 4 elements:
  5
  6
  2
  1
  
julia> s1 ⊇ s2  # issubset
false

これらの多くには、関数名に!を付けた破壊的バージョンもあります。関数の完全な一覧はマニュアルを参照してください。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

集合を学習する