📖 Scenario: You work in a store that sells fruits. You have a list of fruits with their prices. You want to find all fruits that are not expensive, meaning their price is less than 5.
🎯 Goal: Build a Ruby program that uses reject to filter out expensive fruits from the list, keeping only the affordable ones.
📋 What You'll Learn
Create a hash called fruits with these exact entries: 'apple' => 3, 'banana' => 2, 'cherry' => 7, 'date' => 6, 'elderberry' => 1
Create a variable called price_limit and set it to 5
Use reject on fruits with a block that removes fruits with price greater than or equal to price_limit
Print the resulting hash of affordable fruits
💡 Why This Matters
🌍 Real World
Filtering items based on conditions is common in shopping apps, inventory management, and data analysis.
💼 Career
Knowing how to filter collections efficiently is important for software developers working with data and user interfaces.
Progress0 / 4 steps
1
Create the fruits hash
Create a hash called fruits with these exact entries: 'apple' => 3, 'banana' => 2, 'cherry' => 7, 'date' => 6, 'elderberry' => 1
Ruby
Hint
Use curly braces {} to create a hash with keys and values separated by =>.
2
Set the price limit
Create a variable called price_limit and set it to 5
Ruby
Hint
Just write price_limit = 5 to create the variable.
3
Filter out expensive fruits using reject
Use reject on fruits with a block that removes fruits with price greater than or equal to price_limit. Store the result in a variable called affordable_fruits
Ruby
Hint
Use reject { |fruit, price| price >= price_limit } to remove expensive fruits.
4
Print the affordable fruits
Write puts affordable_fruits to print the resulting hash of affordable fruits
Ruby
Hint
Use puts affordable_fruits to show the filtered fruits.
Practice
(1/5)
1. What does the Ruby method reject do when called on an array?
easy
A. It sorts the array in reverse order.
B. It modifies the original array to keep only elements matching the condition.
C. It returns the first element that matches the condition.
D. It returns a new array excluding elements that match the given condition.
Solution
Step 1: Understand the purpose of reject
The reject method filters elements by removing those that satisfy the condition.
Step 2: Compare with other methods
Unlike select, which keeps matching elements, reject excludes them and returns a new array.
Final Answer:
It returns a new array excluding elements that match the given condition. -> Option D
Quick Check:
reject excludes matching elements = A [OK]
Hint: Reject removes items matching condition, returning a new array [OK]
Common Mistakes:
Thinking reject modifies the original array
Confusing reject with select
Assuming reject returns a single element
2. Which of the following is the correct syntax to use reject on an array nums to remove even numbers?
easy
A. nums.reject { |n| n % 2 == 0 }
B. nums.reject(n % 2 == 0)
C. nums.reject => n { n % 2 == 0 }
D. nums.reject do n; n % 2 == 0 end
Solution
Step 1: Identify correct block syntax for reject
The reject method requires a block with { |var| condition } or do |var| ... end.
Step 2: Check each option's syntax
nums.reject { |n| n % 2 == 0 } uses correct block syntax with braces and block variable. nums.reject(n % 2 == 0) misses block. nums.reject => n { n % 2 == 0 } uses invalid syntax. nums.reject do n; n % 2 == 0 end misses block variable in do syntax.
Final Answer:
nums.reject { |n| n % 2 == 0 } -> Option A
Quick Check:
Correct block syntax with |var| = D [OK]
Hint: Use braces with |var| for reject blocks [OK]
Common Mistakes:
Omitting block variable in block
Passing condition as method argument
Using incorrect block syntax
3. What is the output of this Ruby code?
arr = [1, 2, 3, 4, 5]
result = arr.reject { |x| x > 3 }
puts result.inspect
medium
A. [1, 2, 3]
B. [4, 5]
C. [1, 2, 3, 4, 5]
D. []
Solution
Step 1: Understand the reject condition
The block removes elements where x > 3 is true, so numbers 4 and 5 are removed.
Step 2: Determine remaining elements
Elements 1, 2, and 3 remain because they do not satisfy the condition.
Final Answer:
[1, 2, 3] -> Option A
Quick Check:
reject removes >3, so [1,2,3] remain = A [OK]
Hint: Reject removes matching items, so keep others [OK]
Common Mistakes:
Confusing reject with select
Expecting removed elements as output
Ignoring block condition logic
4. The following code is intended to remove all nil values from the array data. What is the error?
data = [1, nil, 2, nil, 3]
clean = data.reject do |x|
x = nil
end
puts clean.inspect
medium
A. The block variable is missing in the block.
B. The reject method cannot remove nil values.
C. The block uses assignment (=) instead of comparison (==).
D. The code should use select instead of reject.
Solution
Step 1: Identify the block logic error
The block uses x = nil which assigns nil to x instead of checking if x equals nil.
Step 2: Correct the comparison operator
It should use x == nil to test if x is nil for rejection.
Final Answer:
The block uses assignment (=) instead of comparison (==). -> Option C
Quick Check:
Use == for comparison inside reject blocks [OK]
Hint: Use == for comparison inside reject blocks [OK]
Common Mistakes:
Using = instead of == in block condition
Thinking reject modifies original array
Confusing reject with select
5. Given a hash scores = { alice: 90, bob: 55, carol: 75, dave: 40 }, how can you use reject to create a new hash excluding all entries with scores below 60?
hard
A. scores.reject { |name| name < 60 }
B. scores.reject { |name, score| score < 60 }
C. scores.reject { |score| score < 60 }
D. scores.reject { |name, score| name < 60 }
Solution
Step 1: Understand hash reject block parameters
When rejecting from a hash, the block receives two parameters: key and value.
Step 2: Apply condition on values
We want to reject entries where the score (value) is less than 60, so the block should check score < 60.
Step 3: Verify options
scores.reject { |name, score| score < 60 } correctly uses both key and value parameters and checks the score. The other options either use only one block parameter or check the key instead of the value.