Juliaで学ぶプログラミング入門 コレクション／集合

ここではコレクションのうち集合について解説します

# 集合
プログラムにおける集合とは、数学における集合と同様に、複数の要素をまとめたものを指します。プログラムでは、集合を扱うためのデータ構造が用意されていることが多く、これを使うことで、要素の追加や削除、検索などの処理を行うことができます。

## Set
Julia では、集合 (Set) を表すために、Set を使用します。集合とは、要素の重複のない順序付けされていないデータ構造です。

・要素が重複しない
・すでに含まれる要素を追加してもエラーにならないが、要素数は増えない。
・順序はない。

重複しないが追加してもエラーしないため、様々なデータが追加される状況下でもデータ集合をユニークに保ちたい場面で役立ちます。

Julia で集合を使うには、まず Set を使って集合を定義します。例えば、次のように定義します。

```julia
# 集合を定義する
s = Set([1, 2, 3])
```
上記のように、Set 関数に配列を渡して集合を定義します。定義された集合 s は、次のように表示されます。

```julia
Set([1,2,3])
```
集合に要素を追加するには、push!() 関数を使います。例えば、次のように追加します。

```julia
# 集合を定義する
s = Set([1, 2, 3])

# 集合に要素を追加する
push!(s, 4) #複数追加の場合はpush!(s, 4, 5, 6)等とする
```
実行すると、集合 s は次のようになります。

```julia
Set([1,2,3,4])
```
また、集合から要素を削除するには、pop!() 関数を使います。例えば、次のように削除します。

```julia
# 集合を定義する
s = Set([1, 2, 3])

# 集合から要素を削除する
pop!(s, 2)  #複数削除の場合はpush!(s, 2, 3)等とする
```
実行すると、集合 s は次のようになります。
```julia
Set([1,3])
```
```julia
# 集合を定義する
s = Set([1, 2, 3])

# 集合を空にする
empty!(s)
```
実行すると、集合 s は次のようになります。
```julia
Set{Int64}()
```

## 初期化
```julia
 s = Set() # Set{Any}()
```

## 集合の演算
集合 (Set) 同士を計算するために、演算子を使用します。以下に、各演算子の使用方法を示します。
```julia
# 集合を定義する
s1 = Set([1, 2, 3])
s2 = Set([2, 3, 4])

# 和を計算する
s3 = s1 ∪ s2 #Set([1,2,3,4])
# union(s1, s2),∪(set1, set2)も同等

# 積を計算する
s3 = s1 ∩ s2 #Set([2,3])
# intersect(s1, s2),∩(s1, s2)も同等

# 差を計算する
s3 = setdiff(s1, s2) # Set([1])

# 対照差を計算する
s3 = symdiff(s1, s2) # Set([4,1])

# 部分集合の判定
issubset(s1, s2) # false
# ⊆(s1, s2) ,⊇(s1, s2), s1 ⊆ s2, s1 ⊇ s2

# 等価の判定
issetequal(s1, s2) # false

# 空判定
　isempty(s1) # false

# 要素数
　length(s1) #3
```

## For文
集合 (Set) を使った for 文は、次のように書きます。

```julia
# 集合を定義する
s = Set([1, 2, 3])

# 集合から要素を取り出す
for x in s
    println(x)
end
```

実行すると、次のように表示されます。

```
1
2
3
```
## 参考図書
[１から始めるプログラミング](https://amzn.to/3HHR7Yv)
<a href="https://www.amazon.co.jp/1%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%80%B2%E8%97%A4-%E8%A3%95%E4%B9%8B/dp/433902905X?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-1&linkCode=li3&tag=buzz06-22&linkId=8f7deba521f52f812d35ecdbe756cc10&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=433902905X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=433902905X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[Juliaプログラミングクックブック](https://amzn.to/3PFfb0a)
<a href="https://www.amazon.co.jp/Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E2%80%95%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%80%81%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%80%81%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%BE%E3%81%A7-Bogumi%C5%82-Kami%C5%84ski/dp/4873118891?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-2&linkCode=li3&tag=buzz06-22&linkId=4e34b4b620932164412ec18acff914a8&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118891&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4873118891" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[天才プログラマー タンメイが教える Julia超入門](https://amzn.to/3FJRpeW)
<a href="https://www.amazon.co.jp/%E5%A4%A9%E6%89%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E3%82%BF%E3%83%B3%E3%83%A1%E3%82%A4%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Julia%E8%B6%85%E5%85%A5%E9%96%80-Tanmay-Bakshi/dp/4807920219?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-10&linkCode=li3&tag=buzz06-22&linkId=bf79aa67b5c5956c8fd26f9436401dc6&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4807920219&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4807920219" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />