[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
Listで和・差・積をとる方法をご紹介します。
2つのListの和集合をとるには?
和集合とは?
和集合とは、以下のように2つの集合(A, B)を連結して、新たな集合を作成することです。

++メソッドを使用する
Listに対して和をとるには、++メソッドを使用します。
++メソッドを使用して2つのListに対して、すくなくともどちらか一方のListに存在する要素から、新たなListを作成します。
以下に++メソッドの使用例を示します。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listA ++ listB println(result.mkString("[", ", ", "]"))
以下のように、listAとlistBの要素から新たなListが作成されます。
[1, 2, 3, 3, 4, 5]
concatメソッドを使用する
2.13以降では、concatメソッドを使用しても同じことができます。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listA.concat(listB) println(result.mkString("[", ", ", "]"))
以下のように、++メソッドを使用した場合と同じ結果になります。
[1, 2, 3, 3, 4, 5]
unionメソッドを使用する
2.12以前では、unionメソッドを使用して同じことができますが、このメソッドは、2.13以降では非推奨となりました。
したがって、バージョンアップの際には、concatメソッドへ移行しましょう。
以下に、unionメソッドの使用例を示します。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listA.union(listB) println(result.mkString("[", ", ", "]"))
以下のように、++メソッドを使用した場合と同じ結果になります。
[1, 2, 3, 3, 4, 5]
2つのListの差集合をとるには?
差集合とは?
差集合とは、1つの集合で、別の集合に属さない部分の集合です。
また、逆に集合Bから集合Aの差集合をとると以下のようになります。

diffメソッドを使用する
Listに対して差をとるには、diffメソッドを使用します。
diffメソッドを使用して、1つのListから、別のListにも含まれる要素を除いた要素から新たなListを作成します。
以下にdiffメソッドの使用例を示します。
listAからlistBの差をとってみます。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listA.diff(listB) println(result.mkString("[", ", ", "]"))
listAの要素からlistBにも含まれる要素を除いた要素から新たなListが作成されます。
[1, 2]
次に、listBからlistAの差をとってみます。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listB.diff(listA) println(result.mkString("[", ", ", "]"))
listBの要素からlistAにも含まれる要素を除いた要素から新たなListが作成されます。
[4, 5]
2つのListの積集合をとるには?
積集合とは?
2つの集合(A, B)のどちらにも属する部分をAとBの積集合といいます。

intersectメソッドを使用する
Listに対して積をとるには、intersectメソッドを使用します。
intersectメソッドを使用して、2つのListのどちらにも属する要素から新たなListを作成します。
以下にintersectメソッドの使用例を示します。
val listA = List(1, 2, 3) val listB = List(3, 4, 5) val result = listA.intersect(listB) println(result.mkString("[", ", ", "]"))
listAの要素からlistBにも含まれる要素を抽出し、新たなListが作成されます。
[3]
