For-in loop with collections in Swift - Time & Space Complexity
When we use a for-in loop to go through a collection, we want to know how the time it takes changes as the collection grows.
We ask: How does the work increase when the list gets bigger?
Analyze the time complexity of the following code snippet.
let numbers = [1, 2, 3, 4, 5]
var sum = 0
for number in numbers {
sum += number
}
print(sum)
This code adds up all the numbers in a list using a for-in loop.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding each number to the sum inside the for-in loop.
- How many times: Once for every item in the list.
As the list gets bigger, the loop runs more times, doing more additions.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The work grows directly with the number of items.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the list size.
[X] Wrong: "The loop runs faster because it just adds numbers quickly."
[OK] Correct: Even simple steps add up, so more items always mean more work.
Understanding how loops grow with input size helps you explain your code clearly and shows you know how programs handle bigger data.
"What if we nested another for-in loop inside this one to compare each number with every other number? How would the time complexity change?"
Practice
let numbers = [1, 2, 3]
for number in numbers {
print(number)
}Solution
Step 1: Understand the for-in loop structure
The loop goes through each element in the array named 'numbers'.Step 2: Observe the print statement inside the loop
Each element is printed on its own line as the loop runs.Final Answer:
Prints each number in the array one by one -> Option AQuick Check:
for number in numbers prints each number [OK]
- Thinking it prints the whole array at once
- Confusing the loop variable with the collection
- Expecting a sum instead of individual prints
fruits in Swift?Solution
Step 1: Recall Swift for-in loop syntax
The correct syntax uses 'for variable in collection { }'.Step 2: Compare options to syntax
Only for fruit in fruits { print(fruit) } matches this syntax exactly.Final Answer:
for fruit in fruits { print(fruit) } -> Option AQuick Check:
Correct for-in syntax uses 'in' keyword [OK]
- Using 'to' instead of 'in'
- Using parentheses incorrectly
- Using 'foreach' which is not Swift syntax
let names = ["Anna", "Bob", "Cara"]
for name in names {
print(name.count)
}Solution
Step 1: Identify the array elements and their lengths
"Anna" has 4 letters, "Bob" has 3, "Cara" has 4.Step 2: Understand the loop prints each name's character count
The loop prints 4, then 3, then 4 on separate lines.Final Answer:
4 3 4 -> Option DQuick Check:
name.count matches each string length [OK]
- Mixing up the order of counts
- Counting letters incorrectly
- Assuming print outputs on same line
let colors = ["red", "green", "blue"]
for color in colors
print(color)
}Solution
Step 1: Check for proper loop syntax
The for-in loop requires braces '{' and '}' to enclose the loop body.Step 2: Identify missing opening brace
The code has a closing brace '}' but no opening brace '{' after the for line.Final Answer:
Missing opening brace '{' after for loop -> Option CQuick Check:
for loops need braces around their body [OK]
- Forgetting opening brace
- Misplacing braces
- Assuming print can be outside without braces
let scores = ["Alice": 85, "Bob": 92, "Cara": 78]
Using a for-in loop, how do you print only the names of students who scored above 80?
Solution
Step 1: Understand dictionary iteration with key-value pairs
Using 'for (name, score) in scores' lets you access both keys and values directly.Step 2: Apply condition to print names with score above 80
Inside the loop, check if score > 80, then print the name.Final Answer:
for (name, score) in scores { if score > 80 { print(name) } } -> Option BQuick Check:
Use (key, value) pairs to filter dictionary [OK]
- Trying to loop only keys or values without pairing
- Forgetting to unwrap optional values
- Printing scores instead of names
Ready to prove it?
Pass the test and this pattern moves unknown
