Mengen
Ein
Setist eine Sammlung, die nur ein Element jedes Wertes zulässt.
Die häufigste Set-Aktivität ist der Test auf Mitgliedschaft mit in oder
contains():
// Sets/Sets.kt
import atomictest.eq
fun main() {
val intSet = setOf(1, 1, 2, 3, 9, 9, 4)
// No duplicates:
intSet eq setOf(1, 2, 3, 4, 9)
// Element order is unimportant:
setOf(1, 2) eq setOf(2, 1)
// Set membership:
(9 in intSet) eq true
(99 in intSet) eq false
intSet.contains(9) eq true
intSet.contains(99) eq false
// Does this set contain another set?
intSet.containsAll(setOf(1, 9, 2)) eq true
// Set union:
intSet.union(setOf(3, 4, 5, 6)) eq
setOf(1, 2, 3, 4, 5, 6, 9)
// Set intersection:
intSet intersect setOf(0, 1, 2, 7, 8) eq
setOf(1, 2)
// Set difference:
intSet subtract setOf(0, 1, 9, 10) eq
setOf(2, 3, 4)
intSet - setOf(0, 1, 9, 10) eq
setOf(2, 3, 4)
}
Dieses Beispiel zeigt:
- Das Platzieren von doppelten Elementen in einem
Setentfernt diese Duplikate automatisch. - Die Reihenfolge der Elemente ist bei Mengen nicht wichtig. Zwei Mengen sind gleich, wenn sie die gleichen Elemente enthalten.
- Sowohl
inals auchcontains()testen auf Mitgliedschaft. - Sie können die üblichen Venn-Diagramm-Operationen wie Überprüfung auf Teilmengen, Vereinigung, Schnittmenge und Differenz durchführen, entweder mit Punktnotation (
set.union(other)) oder Infix-Notation (set intersect other). Die Funktionenunion,intersectundsubtractkönnen mit Infix-Notation verwendet werden. - Die Mengendifferenz kann entweder mit
subtract()oder dem Minus-Operator ausgedrückt werden.
Um Duplikate aus einer Liste zu entfernen, konvertieren Sie sie in ein Set:
// Sets/RemoveDuplicates.kt
import atomictest.eq
fun main() {
val list = listOf(3, 3, 2, 1, 2)
list.toSet() eq setOf(1, 2, 3)
list.distinct() eq listOf(3, 2, 1)
"abbcc".toSet() eq setOf('a', 'b', 'c')
}
Sie können auch distinct() verwenden, das eine List zurückgibt. Sie können toSet() auf einem String aufrufen, um ihn in eine Menge einzigartiger Zeichen umzuwandeln.
Wie bei List bietet Kotlin zwei Erstellungsfunktionen für Set. Das Ergebnis von setOf() ist schreibgeschützt. Um ein veränderbares Set zu erstellen, verwenden Sie mutableSetOf():
// Sets/MutableSet.kt
import atomictest.eq
fun main() {
val mutableSet = mutableSetOf<Int>()
mutableSet += 42
mutableSet += 42
mutableSet eq setOf(42)
mutableSet -= 42
mutableSet eq setOf<Int>()
}
Die Operatoren += und -= fügen Elemente zu Sets hinzu bzw. entfernen sie, genau wie bei Lists.
Übungen und Lösungen finden Sie unter www.AtomicKotlin.com.