📖 Scenario: You work at a small bakery. You have a list of prices for different pastries. You want to create a new list that shows the prices with tax added.
🎯 Goal: Build a Ruby program that uses map (also called collect) to add tax to each price in a list.
📋 What You'll Learn
Create an array called prices with the exact values: 2.5, 3.0, 4.75, 1.25
Create a variable called tax_rate and set it to 0.1 (which means 10% tax)
Use map on prices with block variable price to create a new array prices_with_tax where each price is increased by tax
Print the prices_with_tax array
💡 Why This Matters
🌍 Real World
Adding tax to prices is a common task in stores and online shops to show customers the final cost.
💼 Career
Understanding how to transform lists of data with <code>map</code> is a key skill for Ruby developers working with collections.
Progress0 / 4 steps
1
Create the initial prices array
Create an array called prices with these exact values: 2.5, 3.0, 4.75, 1.25
Ruby
Hint
Use square brackets [] to create an array and separate values with commas.
2
Set the tax rate
Create a variable called tax_rate and set it to 0.1 (which means 10% tax)
Ruby
Hint
Just assign 0.1 to the variable tax_rate.
3
Use map to add tax to each price
Use map on the prices array with block variable price to create a new array called prices_with_tax. Each element should be the original price plus tax (price + price * tax_rate).
Ruby
Hint
Use prices.map { |price| ... } and inside the block add tax to each price.
4
Print the prices with tax
Write a puts statement to print the prices_with_tax array.
Ruby
Hint
Use puts prices_with_tax to print each price on its own line.
Practice
(1/5)
1. What does the Ruby method map (or collect) do to an array?
easy
A. It sorts the array in ascending order.
B. It deletes items from the original array.
C. It creates a new array by changing each item based on the block given.
D. It returns the first item of the array.
Solution
Step 1: Understand the purpose of map
The map method takes each item in the array and applies the block's code to it.
Step 2: Result of map
This creates a new array with the changed items, leaving the original array unchanged.
Final Answer:
It creates a new array by changing each item based on the block given. -> Option C
Quick Check:
map changes items and returns new array [OK]
Hint: Remember: map returns a new changed array, original stays same [OK]
Common Mistakes:
Thinking map changes the original array
Confusing map with delete or sort methods
Believing map returns a single value
2. Which of the following is the correct syntax to double each number in the array [1, 2, 3] using map?
easy
A. [1, 2, 3].map { |x| x * 2 }
B. [1, 2, 3].map(x => x * 2)
C. [1, 2, 3].map do x x * 2 end
D. [1, 2, 3].map { x -> x * 2 }
Solution
Step 1: Identify correct block syntax
In Ruby, map uses a block with { |variable| code } or do |variable| code end.
Step 2: Check each option
[1, 2, 3].map { |x| x * 2 } uses correct block syntax with { |x| x * 2 }. Others have syntax errors or wrong block format.
Final Answer:
[1, 2, 3].map { |x| x * 2 } -> Option A
Quick Check:
Use curly braces and pipe for block variables [OK]
Hint: Use { |var| ... } for map blocks in one line [OK]
Common Mistakes:
Missing pipes around block variable
Using arrow syntax like JavaScript
Incorrect do-end block without pipes
3. What is the output of this Ruby code?
[4, 5, 6].map { |n| n + 1 }
medium
A. [4, 5, 6]
B. Error: undefined method
C. [3, 4, 5]
D. [5, 6, 7]
Solution
Step 1: Understand the block operation
The block adds 1 to each number in the array: 4+1=5, 5+1=6, 6+1=7.
Step 2: Result of map
The map method returns a new array with these values: [5, 6, 7].
Final Answer:
[5, 6, 7] -> Option D
Quick Check:
Each item +1 = [5, 6, 7] [OK]
Hint: Add inside block to transform each item [OK]
Common Mistakes:
Expecting original array to change
Confusing map with each (which returns original array)
Thinking map returns a single value
4. Find the error in this code snippet:
numbers = [1, 2, 3]
numbers.map { n n * 2 }
medium
A. The block should use parentheses
B. Missing pipe symbols around block variable
C. map cannot be used on arrays
D. The array should be a hash
Solution
Step 1: Check block syntax
The block is missing pipes around the variable: it should be { |n| n * 2 }.
Step 2: Understand Ruby block rules
Without pipes, Ruby does not know the block variable, causing a syntax error.
Final Answer:
Missing pipe symbols around block variable -> Option B
Quick Check:
Always use |var| in map blocks [OK]
Hint: Always put pipes | | around block variables [OK]
Common Mistakes:
Omitting pipes in block parameters
Thinking map is invalid on arrays
Trying to use parentheses instead of pipes
5. Given an array of strings ["apple", "banana", "cherry"], how do you use map to create a new array with the length of each string?
hard
A. ["apple", "banana", "cherry"].map { |fruit| fruit.length }
B. ["apple", "banana", "cherry"].map { |fruit| fruit.upcase }
C. ["apple", "banana", "cherry"].map { |fruit| fruit[0] }
D. ["apple", "banana", "cherry"].map { |fruit| fruit.reverse }
Solution
Step 1: Identify the desired transformation
We want the length of each string, so we use fruit.length inside the block.
Step 2: Apply map with correct block
Using map { |fruit| fruit.length } returns a new array of lengths.
Final Answer:
["apple", "banana", "cherry"].map { |fruit| fruit.length } -> Option A
Quick Check:
Map each string to its length [OK]
Hint: Use .length inside map block to get string sizes [OK]
Common Mistakes:
Using unrelated methods like upcase or reverse
Trying to get length without block variable
Confusing map with each for transformation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.