class Array(T)

Overview

An Array is an ordered, integer-indexed collection of objects of type T.

Array indexing starts at 0. A negative index is assumed to be relative to the end of the array: -1 indicates the last element, -2 is the next to last element, and so on.

An Array can be created using the usual new method (several are provided), or with an array literal:

Array(Int32).new  # => []
[1, 2, 3]         # Array(Int32)
[1, "hello", 'x'] # Array(Int32 | String | Char)

See Array literals in the language reference.

An Array can have mixed types, meaning T will be a union of types, but these are determined when the array is created, either by specifying T or by using an array literal. In the latter case, T will be set to the union of the array literal elements' types.

When creating an empty array you must always specify T:

[] of Int32 # same as Array(Int32)
[]          # syntax error

An Array is implemented using an internal buffer of some capacity and is reallocated when elements are pushed to it when more capacity is needed. This is normally known as a dynamic array.

You can use a special array literal syntax with other types too, as long as they define an argless new method and a << method. Set is one such type:

set = Set{1, 2, 3} # => Set{1, 2, 3}
set.class          # => Set(Int32)

The above is the same as this:

set = Set(typeof(1, 2, 3)).new
set << 1
set << 2
set << 3

Included Modules

Defined in:

crystal_on_steroids/array/from.cr
crystal_on_steroids/array/in_groups.cr
crystal_on_steroids/array/not_last.cr
crystal_on_steroids/array/ordinal.cr
crystal_on_steroids/array/rest.cr
crystal_on_steroids/array/slice.cr
crystal_on_steroids/array/split.cr
crystal_on_steroids/array/to.cr
crystal_on_steroids/to_query.cr

Instance Method Summary

Instance methods inherited from module Enumerable(T)

avg avg, blank? blank?, exactly?(count : Int32, &) exactly?, excludes?(obj) excludes?, frequencies frequencies, many?(&)
many?
many?
, pluck(*keys) pluck, pluck?(*keys) pluck?, without(*items) without

Instance methods inherited from class Object

in?(another_object) in?, presence presence, presence_in(another_object) presence_in, present? present?, to_param to_param, to_query(namespace)
to_query
to_query

Class methods inherited from class Object

❨╯°□°❩╯︵┻━┻ ❨╯°□°❩╯︵┻━┻

Instance Method Detail

def fifth #

Returns the fifth element in an array.

[1, 2, 3, 4, 5].second
=> [5]

[View source]
def fourth #

Returns the fourth element in an array.

[1, 2, 3, 4, 5].second
=> [4]

[View source]
def from(position : Int) #

Returns the tail of the array from position.

  %w( a b c d ).from(0)
=> ["a", "b", "c", "d"]

  %w( a b c d ).from(2)
=> ["c", "d"]

  %w( a b c d ).from(10)
=> []

  %w().from(0)
=> []

  %w( a b c d ).from(-2)
=> ["c", "d"]

  %w( a b c ).from(-10)
=> []

[View source]
def in_groups(number, fill_with = nil) #

Splits or iterates over the array in number of groups, padding any remaining slots with fill_with unless it is false.

  %w(1 2 3 4 5 6 7 8 9 10).in_groups(3) {|group| p group}
  ["1", "2", "3", "4"]
  ["5", "6", "7", nil]
  ["8", "9", "10", nil]

  %w(1 2 3 4 5 6 7 8 9 10).in_groups(3, '&nbsp;') {|group| p group}
  ["1", "2", "3", "4"]
  ["5", "6", "7", "&nbsp;"]
  ["8", "9", "10", "&nbsp;"]

  %w(1 2 3 4 5 6 7).in_groups(3, false) {|group| p group}
  ["1", "2", "3"]
  ["4", "5"]
  ["6", "7"]

[View source]
def in_groups(number, fill_with = nil, &) #

[View source]
def not_last #

Returns the elements in an array except the last one.

[1, 2, 3, 4, 5].not_last
=> [1, 2, 3, 4]

[View source]
def rest #

Returns the elements in an array except the first one.

[1, 2, 3, 4, 5].rest
=> [2, 3, 4, 5]

[View source]
def second #

Returns the second element in an array.

[1, 2, 3, 4, 5].second
=> [2]

[View source]
def slice(index : Int, length : Int) : Array(T) #

Array#slice(index : Int, length : Int)

Returns a sub array starting from the index for the length thats passed.


[View source]
def slice(index : Int) : T #

Array#slice(index : Int)

Returns the element of the array at the passed in Index.


[View source]
def slice(range : Range(Int, Int)) : Array(T) #

Array#slice(range : Range(Int, Int))

Returns a sub array based on the range passed in.


[View source]
def split(value = nil) #

Divides the array into one or more subarrays based on a delimiting value or the result of an optional block.

[1, 2, 3, 4, 5].split(3)
=> [[1, 2], [4, 5]]

[View source]
def split(&) #

Divides the array into one or more subarrays based on a the result of an optional block.

(1..10).to_a.split { |i| i % 3 == 0 }
=> [[1, 2], [4, 5], [7, 8], [10]]

[View source]
def third #

Returns the third element in an array.

[1, 2, 3, 4, 5].second
=> [3]

[View source]
def to(position : Int) #

Returns the beginning of the array up to position.

  %w( a b c d ).to(0)
=> ["a"]

  %w( a b c d ).to(2)
=> ["a", "b", "c"]

  %w( a b c d ).to(10)
=> ["a", "b", "c", "d"]

  %w().to(0)
=> []

  %w( a b c d ).to(-2)
=> ["a", "b", "c"]

  %w( a b c ).to(-10)
=> []

[View source]
def to_param #

Calls #to_param on all its elements and joins the result with slashes.

source: Rails ActiveSupport


[View source]
def to_query(namespace) #

Cast an array as a HTTP::Params and buils an url-encode string.

["michael", "jhon"].to_query("user")
=> "user%5B%5D=michael&user%5B%5D=jhon"

[View source]