ZetCode

Kotlin的for关键字

最后修改于 2025 年 4 月 19 日

Kotlin的for循环提供了一种简洁的方式来迭代范围、数组、集合和其他可迭代对象。 for 关键字是循环操作的核心。 本教程通过实际例子深入探讨了 for 关键字。

基本定义

Kotlin中的 for 关键字用于迭代。 它适用于任何提供迭代器的对象。 与某些语言不同,Kotlin的for循环始终用于在范围或集合上进行迭代。

迭代一个范围

for 的最简单用法是迭代一个数字范围。 Kotlin 提供了 .. 运算符来创建可在for循环中使用的范围。

RangeIteration.kt
package com.zetcode

fun main() {

    for (i in 1..5) {
        println(i)
    }
}

此示例打印从 1 到 5 的数字。 1..5 创建一个包含范围。 循环变量 i 依次取范围内的每个值。 这是Kotlin中最基本的for循环形式。

使用步长迭代一个范围

Kotlin允许在迭代范围时指定步长值。 这控制了迭代中连续值之间的增量。

RangeStep.kt
package com.zetcode

fun main() {

    for (i in 1..10 step 2) {
        println(i)
    }
}

在这里,我们打印 1 到 10 之间的奇数。 step 2 修饰符使循环以 2 而不是 1 为增量。 当您需要在迭代期间跳过元素时,这很有用。

迭代一个数组

for 循环可以迭代数组和其他集合。 语法与范围相同,使其在不同的可迭代类型中保持一致。

ArrayIteration.kt
package com.zetcode

fun main() {

    val fruits = arrayOf("Apple", "Banana", "Cherry")
    
    for (fruit in fruits) {
        println(fruit)
    }
}

此示例迭代一个字符串数组。 循环变量 fruit 依次取每个数组元素。 相同的语法适用于列表、集合和其他集合类型。

使用索引迭代

有时您需要在迭代过程中同时获取元素及其索引。 Kotlin为此提供了 withIndex 函数。

IndexedIteration.kt
package com.zetcode

fun main() {

    val colors = listOf("Red", "Green", "Blue")
    
    for ((index, color) in colors.withIndex()) {
        println("$index: $color")
    }
}

在这里,我们使用解构来在每次迭代中获取索引和值。 withIndex 函数返回一个索引-值对的可迭代对象。 这比手动管理计数器变量更清晰。

迭代一个Map

可以使用 for 循环迭代Map,并使用解构来访问键和值。 Kotlin 提供了几种迭代map条目的方法。

MapIteration.kt
package com.zetcode

fun main() {

    val map = mapOf(1 to "One", 2 to "Two", 3 to "Three")
    
    for ((key, value) in map) {
        println("$key = $value")
    }
}

此示例演示了使用解构的map迭代。 每个map条目都被分解为 keyvalue 组件。 相同的语法适用于可变和不可变map。

迭代一个字符串

字符串在Kotlin中是可迭代的,允许您使用 for 循环处理字符串中的每个字符。 这对于逐字符处理很有用。

StringIteration.kt
package com.zetcode

fun main() {

    val text = "Kotlin"
    
    for (ch in text) {
        println(ch)
    }
}

在这里,我们迭代字符串“Kotlin”中的每个字符。 循环变量 ch 依次取每个字符。 这种方法比使用传统的索引访问更清晰。

自定义迭代器

您可以通过实现 Iterator 接口使任何类可迭代。 这允许您的自定义类型与 for 循环一起使用。

CustomIterator.kt
package com.zetcode

class Countdown(val start: Int) : Iterable<Int> {
    override fun iterator(): Iterator<Int> {
        return object : Iterator<Int> {
            var current = start
            override fun hasNext() = current > 0
            override fun next() = current--
        }
    }
}

fun main() {

    for (i in Countdown(5)) {
        println(i)
    }
}

此示例创建一个自定义倒计时迭代器。 Countdown 类实现了 Iterable,允许它在for循环中使用。 循环打印从 5 到 1 的数字。

For循环的最佳实践

来源

Kotlin For循环文档

本教程深入介绍了Kotlin的 for 关键字,展示了各种迭代场景,包括范围、集合和自定义迭代器。 for循环是一个基本结构,它使Kotlin中的迭代简洁易读。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有多年的编程经验。 自 2007 年以来,我一直在撰写编程文章。 到目前为止,我撰写了 1400 多篇文章和 8 本电子书。 我有超过八年的编程教学经验。

列出 所有 Kotlin 教程