[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]