Bird
Raised Fist0
Rubyprogramming~20 mins

Merge and update methods in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Hash Merge Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby code using merge?
Consider the following Ruby code snippet. What will be printed?
Ruby
h1 = {a: 1, b: 2}
h2 = {b: 3, c: 4}
result = h1.merge(h2)
puts result
A{:a=>1, :b=>2}
B{:a=>1, :b=>3, :c=>4}
C{:a=>1, :b=>3}
D{:a=>1, :b=>2, :c=>4}
Attempts:
2 left
💡 Hint
Remember that merge returns a new hash with keys from both hashes, and values from the second hash overwrite the first.
❓ Predict Output
intermediate
2:00remaining
What does update do to the original hash?
Given this Ruby code, what will be the value of h1 after update?
Ruby
h1 = {x: 10, y: 20}
h2 = {y: 30, z: 40}
h1.update(h2)
puts h1
A{:x=>10, :y=>30}
B{:x=>10, :y=>20, :z=>40}
C{:x=>10, :y=>20}
D{:x=>10, :y=>30, :z=>40}
Attempts:
2 left
💡 Hint
Update modifies the original hash by adding or replacing keys from the argument hash.
🔧 Debug
advanced
2:00remaining
Why does this merge code raise an error?
This Ruby code raises an error. What is the cause?
Ruby
h1 = {a: 1, b: 2}
h2 = nil
h1.merge(h2)
ANoMethodError because nil does not have to_hash method
BArgumentError because merge expects a hash argument
CTypeError because nil cannot be merged
DSyntaxError due to invalid syntax
Attempts:
2 left
💡 Hint
Check what merge expects as an argument and what nil is.
❓ Predict Output
advanced
2:00remaining
What is the output when using merge with a block?
What will this Ruby code print?
Ruby
h1 = {a: 100, b: 200}
h2 = {b: 300, c: 400}
result = h1.merge(h2) { |key, old_val, new_val| old_val + new_val }
puts result
A{:a=>100, :b=>500, :c=>400}
B{:a=>100, :b=>300, :c=>400}
C{:a=>100, :b=>200, :c=>400}
D{:a=>100, :b=>200, :c=>300}
Attempts:
2 left
💡 Hint
The block tells merge how to combine values for duplicate keys.
🧠 Conceptual
expert
3:00remaining
How many keys are in the hash after this update?
Given this Ruby code, how many keys does h1 have after update?
Ruby
h1 = {a: 1, b: 2, c: 3}
h2 = {b: 4, d: 5, e: 6}
h1.update(h2)
h1.delete(:c)
h1[:f] = 7
puts h1.keys.size
A6
B4
C5
D3
Attempts:
2 left
💡 Hint
Count keys after update, delete, and adding a new key.

Practice

(1/5)
1.

Which Ruby method returns a new hash by combining two hashes without changing the original?

easy
A. merge
B. merge!
C. update
D. replace

Solution

  1. Step 1: Understand merge behavior

    merge returns a new hash combining two hashes without modifying the original.
  2. Step 2: Compare with merge! and update

    Both merge! and update modify the original hash, so they don't return a new one.
  3. Final Answer:

    merge -> Option A
  4. Quick Check:

    merge returns new hash [OK]
Hint: Remember: merge returns new hash, merge! updates original [OK]
Common Mistakes:
  • Confusing merge and merge! methods
  • Thinking update returns a new hash
  • Assuming replace merges hashes
2.

Which of the following is the correct syntax to update hash a with hash b in Ruby?

a = {x: 1}
b = {y: 2}
easy
A. a + b
B. a.merge!b
C. a.merge b
D. a.update(b)

Solution

  1. Step 1: Check syntax for updating hash

    update is a method that modifies the original hash and takes another hash as argument with parentheses.
  2. Step 2: Compare with other options

    merge! also updates but usually called with ! and parentheses are optional but update(b) is the most explicit and correct syntax here.
  3. Final Answer:

    a.update(b) -> Option D
  4. Quick Check:

    Use update() to modify original hash [OK]
Hint: Use update(hash) to change original hash [OK]
Common Mistakes:
  • Using + operator to combine hashes (not valid)
  • Forgetting parentheses in method call
  • Confusing merge and update syntax
3.

What is the output of this Ruby code?

a = {a: 1, b: 2}
b = {b: 3, c: 4}
c = a.merge(b)
puts c
medium
A. {:a=>1, :b=>2, :c=>4}
B. {:a=>1, :b=>3}
C. {:a=>1, :b=>3, :c=>4}
D. {:b=>3, :c=>4}

Solution

  1. Step 1: Understand merge behavior with overlapping keys

    merge returns a new hash combining keys; overlapping keys get values from the second hash.
  2. Step 2: Apply to given hashes

    Key :b is in both hashes; value from b (3) replaces value from a (2). Keys :a and :c are included as is.
  3. Final Answer:

    {:a=>1, :b=>3, :c=>4} -> Option C
  4. Quick Check:

    Overlapping keys replaced by second hash [OK]
Hint: Overlapping keys take second hash's value in merge [OK]
Common Mistakes:
  • Assuming original hash is changed by merge
  • Not replacing overlapping key values
  • Missing keys from either hash
4.

Identify the error in this Ruby code snippet:

a = {x: 10}
b = {y: 20}
a.merge! b
puts a
medium
A. Output will be empty hash
B. No error; code works correctly
C. Runtime error because merge! cannot be used with variables
D. Syntax error due to missing parentheses in merge!

Solution

  1. Step 1: Check syntax of merge! method call

    merge! can be called without parentheses in Ruby, so a.merge! b is valid syntax.
  2. Step 2: Verify runtime behavior

    merge! updates a with keys and values from b, so a becomes {x: 10, y: 20}. No errors occur.
  3. Final Answer:

    No error; code works correctly -> Option B
  4. Quick Check:

    merge! updates original hash without error [OK]
Hint: merge! can be called without parentheses [OK]
Common Mistakes:
  • Thinking parentheses are mandatory
  • Assuming merge! returns a new hash
  • Expecting runtime error with variable argument
5.

You have two hashes:

h1 = {a: 1, b: 2, c: 3}
h2 = {b: 20, d: 4}

You want to update h1 with h2 but only keep keys from h2 that have values greater than 10. Which code correctly does this?

hard
A. h1.update(h2.select { |k, v| v > 10 })
B. h1.update(h2.reject { |k, v| v > 10 })
C. h1.merge(h2.select { |k, v| v > 10 })
D. h1.replace(h2.select { |k, v| v > 10 })

Solution

  1. Step 1: Filter h2 keys with values > 10

    Use select { |k, v| v > 10 } to keep only keys with values greater than 10.
  2. Step 2: Update h1 with filtered h2

    Use update to modify h1 in place with the filtered hash.
  3. Step 3: Check other options

    merge! also updates but update is clearer; merge returns new hash and does not modify h1.
  4. Final Answer:

    h1.update(h2.select { |k, v| v > 10 }) -> Option A
  5. Quick Check:

    Filter then update original hash [OK]
Hint: Filter with select, then update original hash [OK]
Common Mistakes:
  • Using merge instead of update (does not modify original)
  • Not filtering keys before update
  • Using reject incorrectly
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