Listの和・差・積をとるには?diff、intersect、concatの使い方

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年7月9日

[AD] scalapediaでは記事作成ボランティアを募集しています

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("[", ", ", "]"))

以下のように、listAlistBの要素から新たな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つの集合で、別の集合に属さない部分の集合です。

集合Aから集合Bの差集合をとると以下のようになります。

また、逆に集合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]

サイト内検索