Kotlin 简明教程
Kotlin - Sets
Kotlin 集合是对项目的无序集合。Kotlin 集合可以是可变的 ( mutableSetOf ) 或只读的 ( setOf )。Kotlin 可变或不可变集合不允许有重复的元素。
Loop through Kotlin Sets
有很多方法可以遍历 Kotlin 集合。让我们一个个来研究它们:
Using toString() function
fun main() {
val theSet = setOf("one", "two", "three", "four")
println(theSet.toString())
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[one, two, three, four]
Using Iterator
fun main() {
val theSet = setOf("one", "two", "three", "four")
val itr = theSet.asIterable().iterator()
while (itr.hasNext()) {
println(itr.next())
}
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
one
two
three
four
Size of Kotlin Set
我们可以使用 size 属性获得集合中的元素总数:
fun main() {
val theSet = setOf("one", "two", null, "four", "five")
println("Size of the Set " + theSet.size)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
Size of the Set 5
Removing null a Set
我们可以使用 filterNotNull() 方法从集合中移除 null 元素。
fun main() {
val theSet = setOf("one", "two", null, "four", "five")
val resultSet = theSet.filterNotNull()
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[one, two, four, five]
Sorting Elements
我们可以使用 sorted() 方法按升序排列集合元素,或使用 sortedDescending() 方法按降序排列集合元素。
fun main() {
val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
var resultSet = theSet.sorted()
println(resultSet)
resultSet = theSet.sortedDescending()
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[-1, 0, 10, 20, 30, 31, 40, 50]
[50, 40, 31, 30, 20, 10, 0, -1]
Filtering Elements
我们可以使用 filter() 方法过滤出与给定谓词匹配的元素。
fun main() {
val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
val resultSet = theSet.filter{ it > 30}
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[31, 40, 50]
Dropping First N Elements
我们可以使用 drop() 方法从集合中丢弃前N个元素。
fun main() {
val theSet = setOf(10, 20, 30, 31, 40, 50, -1, 0)
val resultSet = theSet.drop(3)
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[31, 40, 50, -1, 0]
Grouping Set Elements
我们可以使用 groupBy() 方法对与给定谓词匹配的元素进行分组。
fun main() {
val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
val resultSet = theSet.groupBy{ it % 3}
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
{1=[10, 31, 40], 0=[12, 30, 9, -3, 0]}
Mapping Set Elements
我们可以使用 map() 方法使用提供的函数映射所有元素:
fun main() {
val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
val resultSet = theSet.map{ it / 3 }
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[3, 4, 10, 10, 13, 3, -1, 0]
Chunking Set Elements
我们可以使用 chunked() 方法从集合中按给定大小创建块。基于集合中元素的总数,最后一个块可能不包含等于块大小数量的元素。
fun main() {
val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
val resultSet = theSet.chunked(3)
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[[10, 12, 30], [31, 40, 9], [-3, 0]]
Windowing Set Elements
我们可以使用 windowed() 方法对一组元素范围使用给定大小的滑动窗口对一组元素进行移动,从而将其收集到一起。
fun main() {
val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
val resultSet = theSet.windowed(3)
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[[10, 12, 30], [12, 30, 31], [30, 31, 40], [31, 40, 9], [40, 9, -3], [9, -3, 0]]
默认情况下,滑动窗口每次移动一步,但我们可以通过传递自定义步长值来更改此设置:
fun main() {
val theSet = setOf(10, 12, 30, 31, 40, 9, -3, 0)
val resultSet = theSet.windowed(3, 3)
println(resultSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[[10, 12, 30], [31, 40, 9]]
Kotlin mutable Set
我们可以使用 mutableSetOf() 创建可变集合,之后我们可以使用 add() 在同一集合中添加更多元素,并且我们可以使用 remove() 方法从集合中移除元素。
fun main() {
val theSet = mutableSetOf(10, 20, 30)
theSet.add(40)
theSet.add(50)
println(theSet)
theSet.remove(10)
theSet.remove(30)
println(theSet)
}
当你运行上述 Kotlin 程序时,它将生成以下输出:
[10, 20, 30, 40, 50]
[20, 40, 50]