メインコンテンツまでスキップ

セット固有の操作

Kotlinの collections パッケージには、集合に対する一般的な操作(積集合の検索、結合、コレクション同士の差分など)のための拡張関数が含まれています。

2つのコレクションを1つに結合するには、union() 関数を使用します。 これは、infix 形式 a union b で使用できます。 順序付けられたコレクションでは、オペランドの順序が重要であることに注意してください。結果のコレクションでは、最初のオペランドの要素が2番目のオペランドの要素の前に配置されます。

fun main() {

val numbers = setOf("one", "two", "three")

// output according to the order
println(numbers union setOf("four", "five"))
// [one, two, three, four, five]
println(setOf("four", "five") union numbers)
// [four, five, one, two, three]

}

2つのコレクションの積集合(両方に存在する要素)を見つけるには、intersect() 関数を使用します。 別のコレクションに存在しないコレクション要素を見つけるには、subtract() 関数を使用します。 これらの関数はどちらも、infix 形式(例:a intersect b)で呼び出すことができます。

fun main() {

val numbers = setOf("one", "two", "three")

// same output
println(numbers intersect setOf("two", "one"))
// [one, two]
println(numbers subtract setOf("three", "four"))
// [one, two]
println(numbers subtract setOf("four", "three"))
// [one, two]

}

2つのコレクションのいずれかに存在するが、それらの積集合には存在しない要素を見つけるには、union() 関数を使用することもできます。 この操作(対称差として知られています)では、2つのコレクション間の差を計算し、結果を結合します。

fun main() {

val numbers = setOf("one", "two", "three")
val numbers2 = setOf("three", "four")

// merge differences
println((numbers - numbers2) union (numbers2 - numbers))
// [one, two, four]

}

union()intersect()、および subtract() 関数をリストに適用することもできます。 ただし、それらの結果は_常に_ Set です。この結果では、すべての重複要素が1つにマージされ、インデックスアクセスは利用できません。

fun main() {

val list1 = listOf(1, 1, 2, 3, 5, 8, -1)
val list2 = listOf(1, 1, 2, 2, 3, 5)

// result of intersecting two lists is a Set
println(list1 intersect list2)
// [1, 2, 3, 5]

// equal elements are merged into one
println(list1 union list2)
// [1, 2, 3, 5, 8, -1]

}