Bird
Raised Fist0
Rubyprogramming~10 mins

Array creation methods in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Array creation methods
Start
↓
Choose method
↓
Literal: arr = [
↓
Array.new(size)
↓
Array.new(size, default_value)
↓
Array.new(size) { block }
↓
Array created
↓
Use array
You pick a way to create an array, Ruby builds it, then you use it.
Execution Sample
Ruby
arr1 = []
arr2 = Array.new(3)
arr3 = Array.new(3, 0)
arr4 = Array.new(3) { |i| i * 2 }
Creates arrays using different Ruby methods: empty, fixed size nils, fixed size with default, and with a block.
Execution Table
StepActionCode LineArray StateNotes
1Create empty arrayarr1 = [][]Empty array with zero elements
2Create array with 3 nilsarr2 = Array.new(3)[nil, nil, nil]Size 3, default nil
3Create array with 3 zerosarr3 = Array.new(3, 0)[0, 0, 0]Size 3, default 0 (same object)
4Create array with blockarr4 = Array.new(3) { |i| i * 2 }[0, 2, 4]Size 3, values from block using index
5End--All arrays created successfully
💡 All array creation lines executed, arrays ready for use.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
arr1undefined[][][][][]
arr2undefinedundefined[nil, nil, nil][nil, nil, nil][nil, nil, nil][nil, nil, nil]
arr3undefinedundefinedundefined[0, 0, 0][0, 0, 0][0, 0, 0]
arr4undefinedundefinedundefinedundefined[0, 2, 4][0, 2, 4]
Key Moments - 3 Insights
Why does arr3 have three zeros but they all point to the same object?
Because Array.new(3, 0) uses the same object 0 for all elements, so changing one changes all. See step 3 in execution_table.
How does the block in Array.new(3) { |i| i * 2 } work?
The block runs for each index from 0 to 2, setting each element to i*2. This creates distinct values. See step 4 in execution_table.
What is the difference between arr2 and arr3?
arr2 has three nils (default nil), arr3 has three zeros (default 0 object). arr2 elements are nil, arr3 elements are the same zero object. See steps 2 and 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the content of arr2?
A[nil, nil, nil]
B[0, 0, 0]
C[]
D[1, 2, 3]
💡 Hint
Check the 'Array State' column at step 2 in execution_table.
At which step does the array get values from a block?
AStep 1
BStep 4
CStep 3
DStep 2
💡 Hint
Look for 'block' keyword in the 'Action' column in execution_table.
If we change arr3 to Array.new(3) { 0 }, how would the array elements differ?
AThe array would be empty
BAll elements would be the same object 0
CEach element would be a separate 0 object
DThe array would contain nils
💡 Hint
Compare Array.new(size, obj) vs Array.new(size) { block } behavior from variable_tracker.
Concept Snapshot
Array creation methods in Ruby:
- Literal: arr = [] creates empty array
- Array.new(size) creates array with nils
- Array.new(size, obj) fills with same obj
- Array.new(size) { block } fills with block values
Use block to avoid shared objects.
Full Transcript
This visual trace shows how Ruby creates arrays using different methods. First, an empty array is made with []. Then Array.new(3) creates an array with three nil elements. Next, Array.new(3, 0) creates an array with three zeros, but all zeros are the same object. Finally, Array.new(3) with a block sets each element to a unique value based on the index. The variable tracker shows how each array changes after each step. Key moments explain why shared objects happen and how blocks create distinct elements. The quiz tests understanding of array contents and creation differences.

Practice

(1/5)
1. Which of the following is a correct way to create an empty array in Ruby?
easy
A. array()
B. []
C. {}
D. new Array()

Solution

  1. Step 1: Understand Ruby array syntax

    In Ruby, arrays are created using square brackets [] for literals.
  2. Step 2: Identify correct empty array syntax

    [] creates an empty array, while {} creates an empty hash, and the other options are not Ruby syntax.
  3. Final Answer:

    [] -> Option B
  4. Quick Check:

    Empty array = [] [OK]
Hint: Empty arrays use square brackets [] in Ruby [OK]
Common Mistakes:
  • Using curly braces {} which creates a hash
  • Using parentheses like array() which is invalid
  • Using JavaScript-like syntax new Array()
2. Which of the following is the correct syntax to create an array with 3 elements, all initialized to zero?
easy
A. Array.new(3, 0)
B. Array.new(0, 3)
C. Array(0, 3)
D. new Array(3, 0)

Solution

  1. Step 1: Recall Array.new syntax

    In Ruby, Array.new(size, default_value) creates an array with given size and fills it with the default value.
  2. Step 2: Check each option

    Array.new(3, 0) correctly creates [0, 0, 0]. Array.new(0, 3) creates an empty array since size is first argument. Options C and D are invalid syntax.
  3. Final Answer:

    Array.new(3, 0) -> Option A
  4. Quick Check:

    Array.new(3, 0) = [0, 0, 0] [OK]
Hint: Use Array.new(size, value) to create arrays with default values [OK]
Common Mistakes:
  • Confusing Array.new arguments order
  • Using invalid syntax like Array(0, 3)
  • Trying JavaScript style new Array()
3. What is the output of the following Ruby code?
arr = Array.new(4) { |i| i * 2 }
puts arr.inspect
medium
A. [nil, nil, nil, nil]
B. [2, 4, 6, 8]
C. [0, 2, 4, 6]
D. [0, 0, 0, 0]

Solution

  1. Step 1: Understand Array.new with block

    When Array.new is called with a block, it runs the block for each index, passing the index as i.
  2. Step 2: Calculate each element

    For indices 0 to 3, the block returns i * 2: 0*2=0, 1*2=2, 2*2=4, 3*2=6.
  3. Final Answer:

    [0, 2, 4, 6] -> Option C
  4. Quick Check:

    Array with block fills elements by index * 2 [OK]
Hint: Array.new with block uses index to set each element [OK]
Common Mistakes:
  • Assuming default value 0 for all elements
  • Confusing block argument meaning
  • Expecting nil values without block
4. The following code is intended to create an array of 3 separate empty arrays. What is the problem?
arr = Array.new(3, [])
arr[0] << 1
puts arr.inspect
medium
A. [[1], [1], [1]]
B. [[1], [], []]
C. [[], [], []]
D. SyntaxError

Solution

  1. Step 1: Understand Array.new with default object

    Using Array.new(3, []) creates 3 references to the same empty array, not 3 separate arrays.
  2. Step 2: Analyze mutation effect

    When arr[0] << 1 runs, it adds 1 to the shared array, so all elements show the change.
  3. Final Answer:

    [[1], [1], [1]] -> Option A
  4. Quick Check:

    Same object repeated causes all elements to change [OK]
Hint: Use block with Array.new for separate objects [OK]
Common Mistakes:
  • Expecting separate arrays but all share one object
  • Not using block form for unique elements
  • Assuming << affects only one element
5. How can you create an array of 5 hashes, each with keys :a and :b initialized to 0, ensuring each hash is a separate object?
hard
A. Array(5) { {a: 0, b: 0} }
B. Array.new(5, {a: 0, b: 0})
C. [{a: 0, b: 0}] * 5
D. Array.new(5) { {a: 0, b: 0} }

Solution

  1. Step 1: Understand object references in Array.new

    Using Array.new(5, {a: 0, b: 0}) or [{a: 0, b: 0}] * 5 repeats the same hash object 5 times.
  2. Step 2: Use block form for unique hashes

    Using Array.new(5) { {a: 0, b: 0} } runs the block 5 times, creating 5 separate hashes.
  3. Final Answer:

    Array.new(5) { {a: 0, b: 0} } -> Option D
  4. Quick Check:

    Block form creates unique objects [OK]
Hint: Use block with Array.new for unique hashes [OK]
Common Mistakes:
  • Using Array.new with default hash causes shared references
  • Using multiplication operator with arrays of hashes
  • Trying invalid Array() constructor syntax
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