Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดัชนีปัจจุบันใน forEach Loop ของ Kotlin

ภาพรวม

Kotlin มี forEach สำหรับวนลูป แต่ไม่ให้ Index โดยตรง ต้องใช้ forEachIndexed หรือ withIndex() แทน

วิธีที่ 1: forEachIndexed() - แนะนำ


fun main() {
    val subjects = listOf("Java", "Kotlin", "JS", "C")
    
    subjects.forEachIndexed { index, element ->
        println("index = $index, item = $element")
    }
}

ผลลัพธ์


index = 0, item = Java
index = 1, item = Kotlin
index = 2, item = JS
index = 3, item = C

วิธีที่ 2: withIndex() + for Loop


fun main() {
    val subjects = listOf("Java", "Kotlin", "JS", "C")
    
    for ((index, value) in subjects.withIndex()) {
        println("The subject of $index is $value")
    }
}

ผลลัพธ์


The subject of 0 is Java
The subject of 1 is Kotlin
The subject of 2 is JS
The subject of 3 is C

วิธีที่ 3: ใช้ withIndex() กับ forEach (Less Common)


subjects.withIndex().forEach { (index, value) ->
    println("$index: $value")
}

การปรับแต่ง Index เริ่มต้น (Custom Start Index)


fun main() {
    val subjects = listOf("Java", "Kotlin", "JS", "C")
    
    // เริ่มนับจาก 1 แทน 0
    subjects.withIndex().forEach { (index, value) ->
        println("${index + 1}. $value")
    }
    
    // หรือใช้ forEachIndexed กับ offset
    subjects.forEachIndexed { index, value ->
        println("${index + 1}. $value")
    }
}

ตารางเปรียบเทียบ

วิธีSyntaxเหมาะสำหรับReturn
forEachIndexed.forEachIndexed { i, v -> }การทำงานแบบ Inline/FunctionalUnit
withIndex + forfor ((i,v) in list.withIndex())ต้องการ break/continue, 複雑 LogicUnit
withIndex + forEach.withIndex().forEach { (i,v) -> }Functional ChainUnit

ข้อสังเกต

  • forEach ไม่มี Index - ใช้ forEachIndexed แทน
  • withIndex() คืนค่า Iterable> ใช้ได้กับทุก Iterable
  • Index เริ่มต้นที่ 0 เสมอ - ปรับเองด้วย index + offset
  • Performance: forEachIndexed และ for loop เร็วกว่า withIndex().forEach() เล็กน้อย (ไม่สร้าง Wrapper Object)