Fork, clone, branch (training), bundle install
By the end of this, students should be able to:
- Contrast Ruby Arrays with JavaScript Arrays.
- Create a Ruby Array using both the literal (
[]
) andnew
constructors. - Assign an element at a specific index in a Ruby Array.
- Access elements by index in a Ruby Array.
- Add elements to and remove elements from the end of a Ruby Array.
- Add elements to and remove elements from the beginning of a Ruby Array.
In Ruby, "Arrays are ordered, integer-indexed collections of any object." From that, Ruby Arrays seem a lot like JavaScript Arrays. But there are some important differences.
As with JavaScript, Ruby Arrays can be created using literals (technically, a constructor method on class Array) and with a constructor.
> developers = []
=> []
> developers = Array.new
=> []
With the literal syntax, we can create an array with initial values.
> not_the_same_type = [[], 'one', 2.0, 3]
=> [[], "one", 2.0, 3]
> developers = ['Roberto', 'Ben', 'Susan', 'Nick']
=> ["Roberto", "Ben", "Susan", "Nick"]
If all of the entries are strings, Ruby provides a (Perl inspired) string quoting mechanism to create an Array.
> developers = %w{Roberto Ben Susan Nick}
=> ["Roberto", "Ben", "Susan", "Nick"]
Let's use Array::new to create some initialized arrays in bin/code_along.rb
. Creating Arrays has an important caveat when creating Ruby Arrays with default values.
-
Create an empty array,
lit_array
, using the literal syntax -
Create an array,
constr_array
, using the constructor syntax, initialized with 5 elements -
Create an array,
ten_false_array
, initialized with 10false
elements
How does this compare with creating JavaScript Arrays?
In bin/lab.rb
use a block initializer with Array.new
to create a Ruby Array
with ten elements where elements are equal to their index multiplied by 2.
Store the result and display it on the console with p <array name>
.
In bin/lab.js
do the same in JavaScript with new Array
and a method chain.
Let's explore:
> developers[0]
=> "Roberto"
developers[-1]
=> "Nick"
> developers[-4] == developers[0]
=> true
> developers[developers.length]
=> nil
> developers[-5]
=> nil
> developers[-3, 2]
=> ["Ben", "Susan"]
> developers[-5] = 'Jessica'
IndexError: index -5 too small for array; minimum: -4
from (pry):4:in ``__pry__''
> developers[developers.length] = 'Jessica'
=> "Jessica"
Working in bin/lab.rb
(storing the results of any access in tmp
for display):
- Assign
20
to the element atlength+1
. - Access the 3rd element from the end of an array length of 5.
- Access element 9 for a length of 5 elements.
- Assign
[-12, -49]
to the 5th element from the end for a length of 3. - Access all the elements starting at index 1.
In bin/lab.js
do the same in JavaScript.
Let's explore
- Array#push (Append - also Array#<<)
- Array#pop (Remove from end)
- Array#unshift (Prepend)
- Array#shift (Remove from beginning)
> developers << "Lou"
=> ["Roberto", "Ben", "Susan", "Nick", "Jessica", "Lou"]
> developers.push "Vince"
=> ["Roberto", "Ben", "Susan", "Nick", "Jessica", "Lou", "Vince"]
> developers << "Natalie" << "Phil"
=> ["Roberto",
"Ben",
"Susan",
"Nick",
"Jessica",
"Lou",
"Vince",
"Natalie",
"Phil"]
> developers.shift 4
=> ["Roberto", "Ben", "Susan", "Nick"]
> developers
=> ["Jessica", "Lou", "Vince", "Natalie", "Phil"]
In lab.md
describe the differences between the Array methods push
, pop
,
unshift
, and shift
in Ruby and JavaScript.
Source code distributed under the MIT license. Text and other assets copyright General Assembly, Inc., all rights reserved.