Menu
CoddyTech

使用 Take 和 Drop 进行列表切片

本课属于 Coddy Kotlin 学习旅程的“基础知识”单元。第 80 课,共 93 课。

Kotlin 提供了两种更简单的方法,用于提取列表的一部分。如果你只需要从开头或结尾获取元素,可以使用 take() 和 drop()。

take() 方法会返回一个包含前 n 个元素的新列表:

val numbers = listOf(10, 20, 30, 40, 50)
val firstThree = numbers.take(3)
println(firstThree)  // [10, 20, 30]

drop() 方法的作用正好相反。它跳过前 n 个元素,并返回其余元素:

val numbers = listOf(10, 20, 30, 40, 50)
val afterTwo = numbers.drop(2)
println(afterTwo)  // [30, 40, 50]

与 subList() 不同,这些方法返回的是独立副本,而不是视图。如果你只是想获取“前几个”元素或“除前几个以外的所有”元素,这些方法也更易读。

你可以结合这两种方法来提取中间部分:

val letters = listOf("A", "B", "C", "D", "E")
val middle = letters.drop(1).take(3)
println(middle)  // [B, C, D]

如果你请求的元素数量超过实际存在的数量,这些方法只会返回可用的元素,不会抛出错误:

val short = listOf(1, 2)
println(short.take(10))  // [1, 2]
println(short.drop(10))  // []
challenge icon

挑战

中等

你会收到一个整数列表和两个数字:从开头丢弃多少个元素,以及丢弃后取多少个元素。

将 drop() 和 take() 一起使用,提取列表中间的一段,然后打印提取出的元素。

输入格式:

  • 第一行:一个整数 n,表示元素的数量
  • 接下来的 n 行:要添加到列表中的整数
  • 下一行:从开头丢弃的元素数量
  • 最后一行:丢弃后要取的元素数量

输出格式:

按 Kotlin 默认的列表格式打印结果列表。

示例:

如果列表是 [10, 20, 30, 40, 50, 60],丢弃数量是 2,取出数量是 3,输出应为:

[30, 40, 50]

亲手试试

fun main() {
    // 读取元素数量
    val n = readLine()!!.toInt()
    
    // 读取列表元素
    val list = mutableListOf<Int>()
    for (i in 1..n) {
        list.add(readLine()!!.toInt())
    }
    
    // 读取 drop 和 take 的值
    val dropCount = readLine()!!.toInt()
    val takeCount = readLine()!!.toInt()
    
    // TODO: 在下面编写你的代码
    // 使用 drop() 和 take() 提取中间部分
    
    
    // 输出结果
    println(result)
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Kotlin 在线编辑器