kotlin 相关code

1. 对比:indices vs withIndex()

需求 用 indices 用 withIndex()
需要索引+元素 array[i] 多写一次 直接拿到两个变量
只读元素 不直观 直观
修改元素 array[i] = xxx 无法直接修改(解构后是副本)

总结:如果只是读取索引和元素,withIndex() 更简洁;如果需要修改数组元素,还是得用 indices 或下标访问。

Kotlin 复制代码
/**
 * 
 * 
 * 快速对比
 需求                         推荐写法
只读元素                   for (e in array)              
读索引+元素                for ((i, e) in array.withIndex())   
修改元素                   for (i in array.indices) { array[i] = ... }    
修改+需要索引               for (i in array.indices)
核心原则:在 Kotlin 中,只要想修改数组/列表元素,就必须通过下标 array[index] 赋值。
 * 
 */ 
fun main() {
    
    val fruits = arrayOf("苹果", "香蕉", "橙子", "葡萄")

    // ========== 基础用法 ==========
    println("--- 基础用法 ---")
    for ((index, element) in fruits.withIndex()) {
        println("索引 $index 对应的水果是:$element")
    }
    
	for (i in fruits.indices) {
        // 记住:字符串模板中,只要 $ 后面不是纯变量名(带点号 .、方括号 []、方法调用 () 等),就必须用 ${} 包裹。
        println("索引 $i 对应的水果是:${fruits[i]}")
    }


    // ========== 实际场景 1:格式化编号列表 ==========
    println("\n--- 格式化输出 ---")
    for ((i, fruit) in fruits.withIndex()) {
        println("${i + 1}. $fruit")  // 从 1 开始编号
    }

    // ========== 实际场景 2:查找并替换特定位置的元素 ==========
    println("\n--- 条件处理 ---")
    for ((index, fruit) in fruits.withIndex()) {
        if (index % 2 == 0) {
            println("偶数索引 $index: $fruit (打五折)")
        } else {
            println("奇数索引 $index: $fruit (原价)")
        }
    }

    // ========== 实际场景 3:与前一个元素比较 ==========
    println("\n--- 相邻比较 ---")
    for ((index, fruit) in fruits.withIndex()) {
        if (index > 0) {
            val prev = fruits[index - 1]
            println("$fruit 紧跟在 $prev 后面")
        } else {
            println("$fruit 是第一个")
        }
    }
}

输出:

bash 复制代码
--- 基础用法 ---
索引 0 对应的水果是:苹果
索引 1 对应的水果是:香蕉
索引 2 对应的水果是:橙子
索引 3 对应的水果是:葡萄
索引 0 对应的水果是:苹果
索引 1 对应的水果是:香蕉
索引 2 对应的水果是:橙子
索引 3 对应的水果是:葡萄

--- 格式化输出 ---
1. 苹果
2. 香蕉
3. 橙子
4. 葡萄

--- 条件处理 ---
偶数索引 0: 苹果 (打五折)
奇数索引 1: 香蕉 (原价)
偶数索引 2: 橙子 (打五折)
奇数索引 3: 葡萄 (原价)

--- 相邻比较 ---
苹果 是第一个
香蕉 紧跟在 苹果 后面
橙子 紧跟在 香蕉 后面
葡萄 紧跟在 橙子 后面

2.修改数组的正确写法

方式 1:用 indices(推荐,最清晰)

复制代码
val array = arrayOf(10, 20, 30)

for (i in array.indices) {
    array[i] = array[i] * 2  // ✅ 直接通过下标修改
}

// 结果: [20, 40, 60]

方式 2:用下标范围

复制代码
for (i in 0 until array.size) {
    array[i] += 1
}

方式 3:用 withIndex() 仅取索引,再回写

复制代码
for ((index, _) in array.withIndex()) {
    array[index] = array[index] * 2  // ✅ 也可以,但多此一举
}

快速对比

需求 推荐写法
只读元素 for (e in array)
读索引+元素 for ((i, e) in array.withIndex())
修改元素 for (i in array.indices) { array[i] = ... }
修改+需要索引 for (i in array.indices)

核心原则 :在 Kotlin 中,只要想修改数组/列表元素,就必须通过下标 array[index] 赋值。

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int3 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
ai2work3 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
ai2work3 天前
ch21 签名、校验与发版
kotlin
CoderYanger3 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas