📖 Scenario: You work at a small fruit store. You have a list of fruit prices and want to do some simple calculations to help with pricing and sales.
🎯 Goal: Learn how to use map, filter, and reduce in Swift to transform, select, and combine data from a list.
📋 What You'll Learn
Create an array of fruit prices
Create a discount rate variable
Use map to apply the discount to all prices
Use filter to find prices above a threshold
Use reduce to calculate the total of filtered prices
Print the final total
💡 Why This Matters
🌍 Real World
Stores and shops often need to update prices, apply discounts, and calculate totals quickly and clearly.
💼 Career
Knowing how to use map, filter, and reduce is useful for data processing tasks in many programming jobs, especially in apps that handle lists of items.
Progress0 / 4 steps
1
Create the fruit prices array
Create an array called fruitPrices with these exact values: 2.5, 3.0, 4.75, 1.25, and 5.0.
Swift
Hint
Use square brackets [] to create an array and separate values with commas.
2
Add a discount rate variable
Create a variable called discountRate and set it to 0.1 to represent a 10% discount.
Swift
Hint
Use let to create a constant variable for the discount rate.
3
Apply discount and filter prices
Use map on fruitPrices to create a new array called discountedPrices where each price is reduced by the discountRate. Then use filter on discountedPrices to create an array called expensivePrices that only contains prices greater than 3.0.
Swift
Hint
Use map with a closure to multiply each price by 1 - discountRate. Use filter with a closure to keep prices greater than 3.0.
4
Calculate total and print
Use reduce on expensivePrices to calculate the total sum and store it in a variable called totalPrice. Then print totalPrice.
Swift
Hint
Use reduce(0) with a closure that adds each price to the sum. Then print the total.
Practice
(1/5)
1. What does the map function do in Swift when applied to an array?
easy
A. It changes each item in the array based on a rule.
B. It removes items that don't match a condition.
C. It combines all items into a single value.
D. It sorts the array in ascending order.
Solution
Step 1: Understand the purpose of map
The map function applies a transformation to each element in the array, creating a new array with the changed items.
Step 2: Compare with other functions
Unlike filter which removes items, or reduce which combines items, map changes each item individually.
Final Answer:
It changes each item in the array based on a rule. -> Option A
Quick Check:
map = change each item [OK]
Hint: Map transforms every item, filter picks, reduce combines [OK]
Common Mistakes:
Confusing map with filter or reduce
Thinking map removes items
Assuming map combines items into one
2. Which of the following is the correct syntax to use filter on an array numbers to keep only even numbers?
easy
A. let evens = numbers.map { $0 % 2 == 0 }
B. let evens = numbers.filter($0 % 2 == 0)
C. let evens = numbers.reduce(0) { $0 % 2 == 0 }
D. let evens = numbers.filter { $0 % 2 == 0 }
Solution
Step 1: Identify correct filter syntax
The filter method uses a closure with a condition inside curly braces, like { $0 % 2 == 0 }, to keep items matching the condition.
Step 2: Check each option
let evens = numbers.filter { $0 % 2 == 0 } correctly uses filter with the closure. let evens = numbers.map { $0 % 2 == 0 } uses map which changes items, not filters. let evens = numbers.reduce(0) { $0 % 2 == 0 } misuses reduce. let evens = numbers.filter($0 % 2 == 0) misses the closure braces.
Final Answer:
let evens = numbers.filter { $0 % 2 == 0 } -> Option D
Quick Check:
filter syntax = filter { condition } [OK]
Hint: Filter needs braces and a condition inside { } [OK]
Common Mistakes:
Using map instead of filter
Omitting braces in closure
Using reduce incorrectly for filtering
3. What is the output of this Swift code?
let numbers = [1, 2, 3, 4]
let result = numbers.reduce(0) { $0 + $1 }
print(result)
medium
A. 0
B. [1, 2, 3, 4]
C. 10
D. Error
Solution
Step 1: Understand reduce with initial value 0
The reduce starts with 0 and adds each number in the array: 0 + 1 + 2 + 3 + 4.
Hint: Reduce with + sums all items starting from initial value [OK]
Common Mistakes:
Confusing reduce with map or filter output
Forgetting initial value in reduce
Expecting array output instead of single value
4. Identify the error in this Swift code snippet:
let words = ["apple", "banana", "cherry"]
let filtered = words.filter { word in
word.count > 5
}
print(filtered)
medium
A. No error, code runs correctly
B. Incorrect use of filter instead of map
C. Using word.count instead of word.length
D. Missing return keyword inside filter closure
Solution
Step 1: Check filter closure syntax
The closure uses implicit return because it is a single expression, so no explicit return is needed.
Step 2: Verify property usage
word.count is the correct way to get string length in Swift, so no error there.
Final Answer:
No error, code runs correctly -> Option A
Quick Check:
Single-expression closures return implicitly [OK]
Hint: Single-expression closures return automatically, no return needed [OK]
Common Mistakes:
Adding unnecessary return keyword
Confusing count with length property
Thinking filter needs map syntax
5. Given an array of integers, how would you use map, filter, and reduce together to find the sum of squares of only the odd numbers?
Choose the correct Swift code.
hard
A. let sum = numbers.map { $0 * $0 }.filter { $0 % 2 != 0 }.reduce(0, +)
B. let sum = numbers.filter { $0 % 2 != 0 }.map { $0 * $0 }.reduce(0, +)
C. let sum = numbers.reduce(0) { $0 + $1 * $1 }
D. let sum = numbers.filter { $0 % 2 == 0 }.map { $0 * $0 }.reduce(0, +)
Solution
Step 1: Filter odd numbers first
We want only odd numbers, so use filter { $0 % 2 != 0 } to keep them.
Step 2: Map to square each odd number
Use map { $0 * $0 } to get squares of the filtered odd numbers.
Step 3: Reduce to sum all squares
Use reduce(0, +) to add all squared values into one sum.
Final Answer:
let sum = numbers.filter { $0 % 2 != 0 }.map { $0 * $0 }.reduce(0, +) -> Option B
Quick Check:
Filter odds, map squares, reduce sum [OK]
Hint: Filter odds first, then map squares, finally reduce sum [OK]
Common Mistakes:
Mapping before filtering odd numbers
Filtering even numbers by mistake
Using reduce without mapping squares
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.