9.1.1.9.5 集合特有的操作

原文链接: https://kotlinlang.org/docs/set-operations.html

9.1.1.9.5 集合特有的操作

Kotlin 的集合包中包含用于对集合进行常见操作的扩展函数:求交集、合并,或从一个集合中减去另一个集合。

要把两个集合合并为一个,请使用 union() 函数。它可以用中缀形式 a union b 调用。注意,对于有序集合,操作数的顺序很重要。在结果集合中,第一个操作数的元素排在第二个操作数的元素之前:

1
2
3
4
5
6
7
8
9
fun main() {
    val numbers = setOf("one", "two", "three")

    // 按顺序输出
    println(numbers union setOf("four", "five"))
    // [one, two, three, four, five]
    println(setOf("four", "five") union numbers)
    // [four, five, one, two, three]
}

要求两个集合的交集(即同时存在于两者中的元素),请使用 intersect() 函数。要找出存在于一个集合、但不存在于另一个集合中的元素,请使用 subtract() 函数。这两个函数也都可以用中缀形式调用,例如 a intersect b:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
fun main() {
    val numbers = setOf("one", "two", "three")

    // 输出相同
    println(numbers intersect setOf("two", "one"))
    // [one, two]
    println(numbers subtract setOf("three", "four"))
    // [one, two]
    println(numbers subtract setOf("four", "three"))
    // [one, two]
}

要找出存在于两个集合之一、但不属于它们的交集的元素,你也可以使用 union() 函数。对于这种操作(称为对称差集),请计算两个集合之间的差集并合并结果:

1
2
3
4
5
6
7
8
fun main() {
    val numbers = setOf("one", "two", "three")
    val numbers2 = setOf("three", "four")

    // 合并差集
    println((numbers - numbers2) union (numbers2 - numbers))
    // [one, two, four]
}

你也可以把 union()、intersect() 和 subtract() 函数用于列表。不过,它们的结果始终是 Set。在这个结果中,所有重复元素会被合并为一个,并且无法使用索引访问:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
fun main() {
    val list1 = listOf(1, 1, 2, 3, 5, 8, -1)
    val list2 = listOf(1, 1, 2, 2, 3, 5)

    // 求两个列表交集的结果是 Set
    println(list1 intersect list2)
    // [1, 2, 3, 5]

    // 相等的元素被合并为一个
    println(list1 union list2)
    // [1, 2, 3, 5, 8, -1]
}