Bird
Raised Fist0
Rubyprogramming~5 mins

Dig method for nested access in Ruby

Choose your learning style10 modes available
Introduction
The dig method helps you get values deep inside nested hashes or arrays without writing many checks. It makes your code cleaner and safer.
When you want to get a value inside a nested hash without errors if keys are missing.
When you have nested arrays and want to access elements safely.
When you want to avoid writing many if or nil checks for nested data.
When working with JSON-like data structures in Ruby.
When you want to simplify code that reads deeply nested data.
Syntax
Ruby
object.dig(key1, key2, ..., keyN)
You can pass multiple keys or indexes to dig to go deeper step by step.
If any key or index is missing, dig returns nil instead of raising an error.
Examples
Get the first name from a nested hash safely.
Ruby
person = { name: { first: "John", last: "Doe" } }
first_name = person.dig(:name, :first)
Access nested array elements using dig.
Ruby
data = [ [1, 2], [3, 4] ]
value = data.dig(1, 0)
Returns nil safely when trying to dig into a nil value.
Ruby
info = { user: { details: nil } }
result = info.dig(:user, :details, :age)
Sample Program
This program shows how to use dig to get nested values safely from a hash and array. It prints the first name, phone number, and safely returns nil for a missing city.
Ruby
profile = {
  user: {
    name: {
      first: "Alice",
      last: "Smith"
    },
    contacts: [
      { type: "email", value: "alice@example.com" },
      { type: "phone", value: "123-456-7890" }
    ]
  }
}

# Get first name
puts profile.dig(:user, :name, :first)

# Get phone number
puts profile.dig(:user, :contacts, 1, :value)

# Try to get a missing key safely
puts profile.dig(:user, :address, :city).inspect
OutputSuccess
Important Notes
dig returns nil if any key or index is missing, so you don't get errors.
You can use dig with hashes, arrays, or a mix of both.
If you expect a value might be missing, dig helps avoid extra checks.
Summary
dig lets you access nested data safely and simply.
It returns nil if any part of the path is missing.
Works with hashes and arrays for flexible nested access.

Practice

(1/5)
1. What does the Ruby dig method do when used on a nested hash or array?
easy
A. It safely accesses nested elements and returns nil if any key or index is missing.
B. It deletes the nested element at the given keys or indexes.
C. It converts the nested hash or array into a flat array.
D. It raises an error if any nested key or index is missing.

Solution

  1. Step 1: Understand the purpose of dig

    The dig method is designed to access nested data structures like hashes or arrays without raising errors if a key or index is missing.
  2. Step 2: Behavior on missing keys or indexes

    If any part of the nested path does not exist, dig returns nil instead of raising an error.
  3. Final Answer:

    It safely accesses nested elements and returns nil if any key or index is missing. -> Option A
  4. Quick Check:

    dig returns nil on missing keys/indexes [OK]
Hint: Remember: dig returns nil if path missing, no error [OK]
Common Mistakes:
  • Thinking dig deletes elements
  • Expecting dig to flatten nested structures
  • Assuming dig raises errors on missing keys
2. Which of the following is the correct syntax to use dig on a hash h = {a: {b: 2}} to get the value 2?
easy
A. h.dig(:a).dig(b)
B. h.dig[:a][:b]
C. h[:a].dig(b)
D. h.dig(:a, :b)

Solution

  1. Step 1: Check the correct method call syntax

    The dig method is called with arguments representing the nested keys or indexes, separated by commas inside parentheses.
  2. Step 2: Validate each option

    h.dig(:a, :b) uses h.dig(:a, :b), which is the correct syntax. h.dig[:a][:b] uses square brackets incorrectly. h[:a].dig(b) uses b without the leading colon :, causing NameError. h.dig(:a).dig(b) chains dig calls unnecessarily and uses b without :, causing NameError.
  3. Final Answer:

    h.dig(:a, :b) -> Option D
  4. Quick Check:

    dig called with keys as arguments [OK]
Hint: Use parentheses and commas for dig keys: dig(:a, :b) [OK]
Common Mistakes:
  • Using square brackets after dig
  • Chaining dig calls unnecessarily
  • Forgetting colons for symbol keys in dig
3. Given the code:
data = {user: {profile: {name: "Alice", age: 30}}}
puts data.dig(:user, :profile, :name)

What will be the output?
medium
A. 30
B. nil
C. Alice
D. Error

Solution

  1. Step 1: Trace the dig method call

    The dig method looks for the key :user in data, then :profile inside that, then :name inside profile.
  2. Step 2: Extract the value at the nested keys

    All keys exist, so dig returns the string "Alice".
  3. Final Answer:

    Alice -> Option C
  4. Quick Check:

    dig returns nested value "Alice" [OK]
Hint: Follow keys step-by-step to find nested value [OK]
Common Mistakes:
  • Expecting nil if keys exist
  • Confusing age with name value
  • Thinking dig raises error on existing keys
4. Consider this code snippet:
info = {a: {b: 1}}
puts info.dig(:a, :c)

What is the issue and how to fix it?
medium
A. Returns nil because :c key is missing; no fix needed
B. No issue; output is 1
C. Raises error; fix by checking keys manually
D. Syntax error; fix by adding parentheses

Solution

  1. Step 1: Analyze the dig call with missing key

    The key :c does not exist inside the nested hash under :a.
  2. Step 2: Understand dig behavior on missing keys

    Instead of raising an error, dig returns nil safely when a key is missing.
  3. Final Answer:

    Returns nil because :c key is missing; no fix needed -> Option A
  4. Quick Check:

    dig returns nil on missing keys safely [OK]
Hint: dig returns nil on missing keys; no error [OK]
Common Mistakes:
  • Expecting an error on missing keys
  • Trying to manually check keys before dig
  • Confusing nil output with error
5. You have a nested data structure:
settings = {theme: {colors: [{name: "red", code: "#f00"}, {name: "green", code: "#0f0"}]}}

Which dig call correctly retrieves the color code for the second color?
hard
A. settings.dig(:theme, :colors)[1][code]
B. settings.dig(:theme, :colors, 1, :code)
C. settings.dig(:theme, :colors, :code, 1)
D. settings.dig(:theme, :colors, 2, :code)

Solution

  1. Step 1: Understand the nested structure

    colors is an array of hashes. The second color is at index 1 (arrays start at 0).
  2. Step 2: Use dig with correct keys and index

    To get the code of the second color, use dig(:theme, :colors, 1, :code). settings.dig(:theme, :colors, 1, :code) matches this.
  3. Final Answer:

    settings.dig(:theme, :colors, 1, :code) -> Option B
  4. Quick Check:

    dig accesses nested array index and hash key [OK]
Hint: Use array index as integer in dig for arrays [OK]
Common Mistakes:
  • Using wrong index (2 instead of 1)
  • Passing keys in wrong order
  • Trying to dig with symbol on array
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