Ruby: Array
What is Array
Array is a ordered sequence of items. In ruby, each element can be of any Value Type, and you can add items or delete items in array. (it can grow or shrink)
Create Array
Create array using array literal expression.
xx = [0, 1, 2, "a"] p xx == [0, 1, 2, "a"]
Create array using Array function.
# create a array of 3 elements, each is nil bb = Array.new(3) p bb == [nil, nil, nil] # create array of 3 elements, each is 1 cc = Array.new(3,1) p cc == [1, 1, 1]
Length (Count of Elements)
xx = ["b", 4, 6] p xx.length == 3
Get a Element
Array element can be extracted by appending a square bracket with index.
array[index]
xx = ["a","b","c"] p xx[0] == "a" p xx[1] == "b"
Negative index counts from right.
xx = ["a","b","c"] p xx[-1] == "c"
Get Sub-Array (Slice)
Consecutive elements can be extracted using the form
array[startIndex, count]
xx = [ "a", "b", "c", "d"] p xx[1,2] == ["b", "c"] # first is index, second is count
Change Element
A element can be changed with the form
array[index] = new_value
xx = [0, 1, 2] xx[2] = "b" p xx == [0, 1, "b"]
A slice (continuous sequence) of elements can be changed by assigning to a array directly. The length of the slice need not match the length of new array.
xx = [0,1,2,3,4] # change 4 elements of array to a new array, starting at index 2 xx[2,4] = ["x", "y"] p xx == [0, 1, "x", "y"]
Nested Array
Array can be nested arbitrarily. Append extra bracket to get element of nested array.
xx = [3, 4, [7, 8]]
p xx[2][1] == 8
Add element
xx = [0, 1, 2] p xx.insert(1,"b") == [0, "b", 1, 2] p xx == [0, "b", 1, 2]
Appending element
# appending to array xx = [0, 1] xx << 2 p xx == [0, 1, 2] xx << [5, 6] p xx == [0, 1, 2, [5, 6]]
Delete Element
aa = [0, "b", 2] aa.delete_at(1) == "b" p aa == [0, 2]
Push and Pop
Append/Remove from the end, and modify variable.
xx = [0, 1, 2] # add a element to the end p xx.push("a") == [0, 1, 2, "a"] # original array also changed p xx == [0, 1, 2, "a"] # pop removes the last element, and returns that p xx.pop == "a" p xx == [0, 1, 2]
Join Arrays
Array can be joined with plus sign.
xx = ["a", "b"] + [7, 6] p xx == ["a", "b", 7, 6]
Find the index of a element
xx = ["a","b","c"] p xx.index("b") == 1 # not found, return nil p xx.index("d") == nil
Array Union, Intersection, Difference
aa = [0, 8, 7, 3, 1] bb = [3, 4] # difference p aa - bb == [0, 8, 7, 1] # intersection p aa & bb == [3] # union p aa | bb == [0, 8, 7, 3, 1, 4]
Get uniq elements
xx = [0, 7, 3, 7] # uniq p xx.uniq == [0, 7, 3] # original array not modified p xx == [0, 7, 3, 7] # uniq, modify original array xx.uniq! p xx == [0, 7, 3]
Sorting array
xx = [0, 4, 2] xx.sort == [0, 2, 4] # original not changed p xx == [0, 4, 2] # change original xx.sort! == [0, 2, 4] p xx == [0, 2, 4]
Array equality test
aa = [0, 1, 2] bb = [0, 1, 2.0] cc = [0, 1, "2"] # check if 2 arrays are the same (ignores type.) p ((aa == bb) == true) p ((aa == cc) == false) # check if 2 arrays are the same, and each element has the same type p (aa.eql?(bb) == false)