Bird
Raised Fist0
Kotlinprogramming~10 mins

For loop with index (withIndex) in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - For loop with index (withIndex)
Start with collection
↓
Get first element and index
↓
Execute loop body with element and index
↓
Get next element and index
↓
More elements?
No→Exit loop
↩Back to Execute loop body
The loop goes through each item in a collection, giving you both the item and its position (index) to use inside the loop.
Execution Sample
Kotlin
val fruits = listOf("Apple", "Banana", "Cherry")
for ((index, fruit) in fruits.withIndex()) {
    println("$index: $fruit")
}
This code loops over a list of fruits, printing each fruit with its index number.
Execution Table
StepindexfruitActionOutput
10AppleStart loop, get first element and indexPrint '0: Apple'
21BananaNext element and indexPrint '1: Banana'
32CherryNext element and indexPrint '2: Cherry'
4--No more elements, exit loopLoop ends
💡 All elements processed, loop ends after index 2
Variable Tracker
VariableStartAfter 1After 2After 3Final
index-012-
fruit-"Apple""Banana""Cherry"-
Key Moments - 3 Insights
Why does the index start at 0 instead of 1?
Indexes in Kotlin collections start at 0 by design, as shown in execution_table rows 1-3 where index values are 0, 1, 2.
What happens when the loop reaches the last element?
After processing the last element (index 2), the loop checks for more elements, finds none, and exits as shown in execution_table row 4.
Can I use the index and element separately inside the loop?
Yes, the loop destructures each pair into index and element variables, so you can use them independently as shown in the code sample and execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'fruit' at step 2?
A"Apple"
B"Banana"
C"Cherry"
Dnull
💡 Hint
Check the 'fruit' column in execution_table row with Step 2
At which step does the loop end according to the execution_table?
AStep 3
BStep 2
CStep 4
DStep 1
💡 Hint
Look at the 'Action' column where it says 'No more elements, exit loop'
If the list had 4 fruits instead of 3, how many steps would the execution_table have before exit?
A5 steps
B3 steps
C4 steps
D6 steps
💡 Hint
Each element adds one step plus one exit step, see current 3 elements with 4 steps total
Concept Snapshot
for ((index, element) in collection.withIndex()) {
    // use index and element
}
- Loops over collection with index starting at 0
- index and element are available inside loop
- Loop ends after last element is processed
Full Transcript
This visual execution shows how a Kotlin for loop with withIndex() works. The loop goes through each item in a list, giving both the item's position (index) and the item itself. The index starts at 0 and increases by 1 each time. The loop runs until all items are processed, then it stops. Variables index and fruit change each step, showing the current position and item. Key moments clarify why index starts at 0, what happens at the last element, and how to use index and element separately. The quiz tests understanding of variable values at steps, loop ending step, and how the number of steps changes with list size.

Practice

(1/5)
1. What does the withIndex() function do in a Kotlin for loop?
easy
A. It filters elements based on their index.
B. It sorts the list before looping.
C. It provides both the index and the value of each element during iteration.
D. It reverses the list before looping.

Solution

  1. Step 1: Understand the purpose of withIndex()

    The withIndex() function returns an iterable of pairs containing the index and the value of each element in the collection.
  2. Step 2: Identify what the loop receives

    Using withIndex() in a for loop allows access to both the position (index) and the element (value) simultaneously.
  3. Final Answer:

    It provides both the index and the value of each element during iteration. -> Option C
  4. Quick Check:

    withIndex() = index + value [OK]
Hint: Remember: withIndex() gives index and value together [OK]
Common Mistakes:
  • Thinking it sorts or filters the list
  • Assuming it reverses the collection
  • Confusing index with value only
2. Which of the following is the correct syntax to loop over a list items with index in Kotlin?
easy
A. for ((index, value) in items.withIndex()) { /* code */ }
B. for (index, value in items) { /* code */ }
C. for (index; value in items.withIndex()) { /* code */ }
D. for index, value in items.withIndex() { /* code */ }

Solution

  1. Step 1: Recall Kotlin destructuring syntax in loops

    Kotlin allows destructuring pairs using parentheses in the for loop header, like for ((index, value) in ...).
  2. Step 2: Match syntax with withIndex()

    The correct syntax uses items.withIndex() and destructures the pair into index and value.
  3. Final Answer:

    for ((index, value) in items.withIndex()) { /* code */ } -> Option A
  4. Quick Check:

    Destructure pairs with (index, value) [OK]
Hint: Use parentheses to destructure pairs in for loop [OK]
Common Mistakes:
  • Omitting parentheses around (index, value)
  • Using semicolon instead of comma
  • Missing 'in' keyword
3. What will be the output of this Kotlin code?
val data = listOf("apple", "banana", "cherry")
for ((i, v) in data.withIndex()) {
    println("$i: $v")
}
medium
A. 0: apple 1: banana 2: cherry
B. apple: 0 banana: 1 cherry: 2
C. 1: apple 2: banana 3: cherry
D. Error: cannot destructure

Solution

  1. Step 1: Understand the list and loop

    The list contains three fruits: "apple", "banana", "cherry". The loop uses withIndex() to get index and value.
  2. Step 2: Trace the loop output

    Each iteration prints the index and value separated by colon and space. Indices start at 0.
  3. Final Answer:

    0: apple 1: banana 2: cherry -> Option A
  4. Quick Check:

    Index starts at 0, prints index: value [OK]
Hint: Index starts at 0 in withIndex() loops [OK]
Common Mistakes:
  • Assuming index starts at 1
  • Swapping index and value in output
  • Expecting error from destructuring
4. Identify the error in this Kotlin code snippet:
val numbers = arrayOf(10, 20, 30)
for (i, num in numbers.withIndex()) {
    println("$i -> $num")
}
medium
A. Cannot use withIndex() on arrays.
B. Missing parentheses around (i, num) in the for loop.
C. The println statement syntax is incorrect.
D. Variable names i and num are reserved keywords.

Solution

  1. Step 1: Check for correct destructuring syntax

    In Kotlin, destructuring pairs in a for loop requires parentheses: for ((i, num) in ...).
  2. Step 2: Verify other parts of the code

    Using withIndex() on arrays is valid. The println syntax and variable names are correct.
  3. Final Answer:

    Missing parentheses around (i, num) in the for loop. -> Option B
  4. Quick Check:

    Destructure pairs with parentheses [OK]
Hint: Always use parentheses to destructure pairs in for loops [OK]
Common Mistakes:
  • Omitting parentheses in destructuring
  • Thinking withIndex() doesn't work on arrays
  • Misreading println syntax
5. Given a list of database table names tables = listOf("users", "orders", "products"), how can you create a map of index to table name using a Kotlin for loop with withIndex()?
hard
A. val map = mutableMapOf() for (t in tables) { map[t] = t.length }
B. val map = mutableMapOf() for ((i, t) in tables.withIndex()) { map[t] = i }
C. val map = mutableMapOf() for (i in tables.withIndex()) { map[i] = tables[i] }
D. val map = mutableMapOf() for ((i, t) in tables.withIndex()) { map[i] = t }

Solution

  1. Step 1: Understand the goal

    We want a map where keys are indices (Int) and values are table names (String).
  2. Step 2: Use withIndex() to get index and value

    Loop over tables.withIndex() and assign map[i] = t to build the map correctly.
  3. Final Answer:

    val map = mutableMapOf() for ((i, t) in tables.withIndex()) { map[i] = t } -> Option D
  4. Quick Check:

    Index to value mapping with withIndex() [OK]
Hint: Use withIndex() and map[i] = value to build index-value map [OK]
Common Mistakes:
  • Swapping key and value types in map
  • Not destructuring with parentheses
  • Using wrong loop variable types
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard