今回は、「集合型(set型)」について紹介するよ!
集合型は配列型とはなにが違うの??
配列型との1番の違いは「要素は絶対に重複しない」ってことだよ
それって何か便利なの??
例えば、某遊園地で過去1ヶ月に入場予約した人に向けてキャンペーン用のメールが2重で送らないようにしたい時に便利かな
なるほど!1ヶ月に何回も行く人がいるかもしれないもんね!
また、集合型にした後に出来ることが便利なんだ
ただ重複を無くすだけじゃないんだね
むしろここからが大事で、2つの集合型の要素について調べることができるんだ
例えば、2つの集合を合わせた要素を取り出す時はこんな感じ
前回の辞書型で出てきた記号だ!
これって、数学で習う「和集合」と同じだね...って、集合型ってその「集合」のことなんだね!
そうだね!和集合以外にも「積集合」「差集合」「対称差集合」も同じように扱えるよ
今回はそれぞれの集合を表す「ベン図」と一緒に紹介しておくね
これは知っていれば便利だね!
別に覚えなくても配列で重複を無くすプログラムを書ければ大丈夫なんだけど、知っていれば効率よくプログラミングできるから損はないと思うよ!
操作については一覧表にしておくからまた確認してね
| 構文 | 機能 | 例 |
|---|---|---|
| set([1, 2, 2, 3]) | 重複を取り除いて集合を作成 | {1, 2, 3} |
| a | b | 和集合(両方の要素) | {1, 2} | {2, 3} → {1, 2, 3} |
| a & b | 積集合(共通する要素) | {1, 2} & {2, 3} → {2} |
| a - b | 差集合(aにあってbにない) | {1, 2} - {2, 3} → {1} |
| a ^ b | 対称差集合(どちらか一方のみ) | {1, 2} ^ {2, 3} → {1, 3} |
| a.isdisjoint(b) | 2つの集合が素であるか(共通要素がないか) | {1, 2}.isdisjoint({3, 4}) → True |
| a.add(x) | 要素の追加 | a.add(4) |
| a.remove(x) | 要素の削除(なければエラー) | a.remove(2) |
| a.discard(x) | 要素の削除(なければ無視) | a.discard(2) |
| a.clear() | すべての要素を削除 | a.clear() |
おねーちゃん!早速試してみたんだけど、3つの集合の中で重複がない要素だけを出したいと思って対称差集合を使ったんだけど、「3」が入っちゃってるのおかしくない?
それは初めて集合型を使った人がハマりやすい間違いだね
この場合の実際の処理は「(a ^ b) ^ c」って感じで左から順番に処理されるから、「(a ^ b)」で一度消えて、その後に復活するんだよ
じゃあどうしたらうまくいくの?
例えば、「3つの集合の全ての要素から重複している要素を引く」というプログラムを明示的に作ると良いかな
これは気をつけとかないとね汗
