科特林 |检索收集部件
Kotlin 提供了用于检索集合部件的扩展函数。在类之外定义的成员函数称为扩展函数。这些扩展功能可以提供多种方式来从列表中选择不同的项目。
四个扩展功能是:
- 片
- 取放
- 分块
- 开窗的
片
切片函数就像在其他语言中一样工作,它返回具有给定索引的项目列表。这些索引可以作为范围或整数值传递。
演示切片的 Kotlin 示例 -
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries",
"dragon_fruit", "egg_fruit", "fig")
println(fruits.slice(1..4))
println(fruits.slice(0..4 step 2))
println(fruits.slice(setOf(1, 2, 4)))
}
输出:
[banana, cherries, dragon_fruit, egg_fruit]
[apple, cherries, egg_fruit]
[banana, cherries, egg_fruit]
取放
顾名思义, take()函数可以从一开始就获取指定数量的项目。如果我们想从最后获取项目,我们可以调用takeLast()函数。
类似地, drop()函数从开头获取除指定数量的项目之外的所有项目,而dropLast()从最后获取除指定数量的项目之外的所有项目。
Kotlin 示例来演示 take 和 drop -
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries",
"dragon_fruit", "egg_fruit", "fig")
println(fruits.take(3))
println(fruits.takeLast(3))
println(fruits.drop(4))
println(fruits.dropLast(4))
}
输出:
[apple, banana, cherries]
[dragon_fruit, egg_fruit, fig]
[egg_fruit, fig]
[apple, banana]
take 和 drop 中有四个函数,我们可以使用谓词来定义要取出和丢弃的项目数。
Kotlin 程序 –
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries",
"dragon_fruit", "egg_fruit", "fig")
//takeWhile() takes the items upto but
// excluding the first one not matching the predicate.
println(fruits.takeWhile{!it.startsWith("d")})
//takeLastWhile() takes a range of items
// matching the predicate from the end.
println(fruits.takeLastWhile{it != "cherries"})
//dropWhile() returns the items from first
// one not matching the predicate to the end.
println(fruits.dropWhile{it.length == 5})
//dropWhileLast() returns element from the
// beginning to the last one not matching the predicate.
println(fruits.dropLastWhile{it.contains("i")})
}
输出:
[apple, banana, cherries]
[dragon_fruit, egg_fruit, fig]
[banana, cherries, dragon_fruit, egg_fruit, fig]
[apple, banana]
分块
分块是一种函数,通过该功能,列表的各个部分被分解,然后组合在一起成为指定的块大小。 chunk()函数采用单个参数并返回该块大小的列表。
我们还可以对返回的块应用转换。为了做到这一点,我们在调用 chunked() 时将转换作为 lambda函数提供。当使用转换调用chunked()时,块是短暂的列表,应该在 lambda 表达式中用于其他目的。
使用 chunk()函数的 Kotlin 程序 –
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries",
"dragon_fruit", "egg_fruit", "fig")
// chunks into list size of three
println(fruits.chunked(3))
// lambda function to sum the elements
val numbers = (0..11).toList()
println(numbers.chunked(3) { it.sum() })
}
输出:
[[apple, banana, cherries], [dragon_fruit, egg_fruit, fig]]
[3, 12, 21, 30]
开窗的
windowed()函数可以获取给定大小的所有可能范围的项目集合。它返回一个元素范围列表,您将使用特定大小的滑动窗口在集合中看到这些范围。
它有两个可选参数:
step:每个窗口的第一项之间的距离。默认值为 1,因此结果包含从所有元素开始的窗口。
partialWindows:如果为 true,则包括最后剩下的较小尺寸的窗口。
Kotlin 程序演示 windowed()函数-
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries","orange")
println(fruits.windowed(3))
println(fruits.windowed(3, step = 2, partialWindows = true))
}
输出:
[[apple, banana, cherries], [banana, cherries, orange]]
[[apple, banana, cherries], [cherries, orange]]
有一个zipWithNext()函数来构建两个元素窗口,也可以通过转换调用。
Kotlin 程序演示 zipWithNext() –
fun main(args: Array) {
val fruits = listOf("apple", "banana", "cherries",
"dragon_fruit", "egg_fruit", "fig")
println(fruits.zipWithNext())
}
输出:
[(apple, banana), (banana, cherries), (cherries, dragon_fruit),
(dragon_fruit, egg_fruit), (egg_fruit, fig)]
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。