和集合と積集合
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 19/56。
2つのコレクションが関わる要素の所属(メンバーシップ)に関する問い合わせを行う際、Setは真価を発揮します。
let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5, 6]union は、両方の集合からすべての要素を返します:
a.union(b) // {1, 2, 3, 4, 5, 6}intersectionは、両方に含まれる要素のみを返します:
a.intersection(b) // {3, 4}各メソッドは新しい Set を返します。元のセットは変更されません。結果の反復順序は保証されないため、出力する前にソートしてください。
チャレンジ
簡単2行の入力を読み込みます。各行はカンマ区切りの整数のリストです。
これらを集合 a と b として扱います。次の2行を出力してください:
- 積集合(共通部分)。昇順にソートし、
,で連結します(空の場合は空行を出力)。 - 和集合。昇順にソートし、
,で連結します。
1行目の入力が 1,2,3,4 で、2行目の入力が 3,4,5,6 の場合、出力は以下のようになります:
3,4
1,2,3,4,5,6チートシート
Swiftにおける集合(Set)の操作:
let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5, 6]
a.union(b) // {1, 2, 3, 4, 5, 6} - いずれかの集合に含まれる要素
a.intersection(b) // {3, 4} - 両方の集合に含まれる要素どちらのメソッドも新しい Set を返します。元の集合は変更されません。反復順序は保証されないため、出力する前にソートしてください。
自分で試してみよう
let a = Set(readLine()!.components(separatedBy: ",").map { Int($0)! })
let b = Set(readLine()!.components(separatedBy: ",").map { Int($0)! })
// TODO: 積集合をソートして結合、和集合をソートして結合
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。