Array

A generic array datatype.

Description

A generic array that can contain several elements of any type, accessible by a numerical index starting at 0. Negative indices can be used to count from the back, like in Python (-1 is the last element, -2 is the second to last, etc.). Example:

  1. var array = ["One", 2, 3, "Four"]print(array[0]) # One.print(array[2]) # 3.print(array[-1]) # Four.array[2] = "Three"print(array[-2]) # Three.

+ operator:

  1. var array1 = ["One", 2]var array2 = [3, "Four"]print(array1 + array2) # ["One", 2, 3, "Four"]

Note: Concatenating with the += operator will create a new array, which has a cost. If you want to append another array to an existing array, append_array is more efficient. Note: Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use duplicate. Note: When declaring an array with const, the array itself can still be mutated by defining the values at individual indices or pushing/removing elements. Using const will only prevent assigning the constant with another value after it was initialized.

Methods

Method Descriptions

  • Array Array ( PoolColorArray from ) PoolColorArray.

  • Array Array ( PoolVector3Array from ) PoolVector3Array.

  • Array Array ( PoolVector2Array from ) PoolVector2Array.

  • Array Array ( PoolStringArray from ) PoolStringArray.

  • Array Array ( PoolRealArray from ) PoolRealArray.

  • Array Array ( PoolIntArray from ) PoolIntArray.

  • Array Array ( PoolByteArray from ) PoolByteArray.

  • append ( Variant value ) push_back).

  • append_array ( Array array ) Appends another array at the end of this array.
    1. var array1 = [1, 2, 3]var array2 = [4, 5, 6]array1.append_array(array2)print(array1) # Prints [1, 2, 3, 4, 5, 6].

  • Variant back ( ) null if the array is empty. Note: Calling this function is not the same as writing array[-1]. If the array is empty, accessing by index will pause project execution when running from the editor.

  • int bsearch ( Variant value, bool before=true ) before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. Note: Calling bsearch on an unsorted array results in unexpected behavior.

  • int bsearch_custom ( Variant value, Object obj, String func, bool before=true ) obj. Optionally, a before specifier can be passed. If false, the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return true if the first argument is less than the second, and return false otherwise.
    1. func cardinal_to_algebraic(a): match a: "one": return 1 "two": return 2 "three": return 3 "four": return 4 _: return 0func compare(a, b): return cardinal_to_algebraic(a) < cardinal_to_algebraic(b)func _ready(): var a = ["one", "two", "three", "four"] # `compare` is defined in this object, so we use `self` as the `obj` parameter. print(a.bsearch_custom("three", self, "compare", true)) # Expected value is 2.
    Note: Calling bsearch_custom on an unsorted array results in unexpected behavior.

  • clear ( ) resize with a size of 0.

  • int count ( Variant value ) Returns the number of times an element is in the array.

  • Array duplicate ( bool deep=false ) Returns a copy of the array. deep is true, a deep copy is performed: all nested arrays and dictionaries are duplicated and will not be shared with the original array. If false, a shallow copy is made and references to the original nested arrays and dictionaries are kept, so that modifying a sub-array or dictionary in the copy will also impact those referenced in the source array.

  • bool empty ( ) true if the array is empty.

  • erase ( Variant value ) remove instead. Note: This method acts in-place and doesn’t return a value. Note: On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed.

  • fill ( Variant value ) resize to create an array with a given size and initialized elements:
    1. var array = []array.resize(10)array.fill(0) # Initialize the 10 elements to 0.

  • int find ( Variant what, int from=0 ) -1 if not found. Optionally, the initial search index can be passed. Returns -1 if from is out of bounds.

  • int find_last ( Variant value ) -1 if not found.

  • Variant front ( ) null if the array is empty. Note: Calling this function is not the same as writing array[0]. If the array is empty, accessing by index will pause project execution when running from the editor.

  • bool has ( Variant value ) true if the array contains the given value.
    1. ["inside", 7].has("inside") # True["inside", 7].has("outside") # False["inside", 7].has(7) # True["inside", 7].has("7") # False
    Note: This is equivalent to using the in operator as follows:
    1. # Will evaluate to `true`.if 2 in [2, 4, 6, 8]: pass

  • int hash ( ) Returns a hashed 32-bit integer value representing the array and its contents. Note: Arrays with equal content will always produce identical hash values. However, the reverse is not true. Returning identical hash values does not imply the arrays are equal, because different arrays can have identical hash values due to hash collisions.

  • insert ( int position, Variant value ) pos == size()). Note: This method acts in-place and doesn’t return a value. Note: On large arrays, this method will be slower if the inserted element is close to the beginning of the array (index 0). This is because all elements placed after the newly inserted element have to be reindexed.

  • invert ( ) Reverses the order of the elements in the array.

  • Variant max ( ) null is returned.

  • Variant min ( ) null is returned.

  • Variant pop_at ( int position ) position. If negative, position is considered relative to the end of the array. Leaves the array untouched and returns null if the array is empty or if it’s accessed out of bounds. An error message is printed when the array is accessed out of bounds, but not when the array is empty. Note: On large arrays, this method can be slower than pop_back as it will reindex the array’s elements that are located after the removed element. The larger the array and the lower the index of the removed element, the slower pop_at will be.

  • Variant pop_back ( ) null if the array is empty, without printing an error message. See also pop_front.

  • Variant pop_front ( ) null if the array is empty, without printing an error message. See also pop_back. Note: On large arrays, this method is much slower than pop_back as it will reindex all the array’s elements every time it’s called. The larger the array, the slower pop_front will be.

  • push_back ( Variant value ) push_front.

  • push_front ( Variant value ) push_back. Note: On large arrays, this method is much slower than push_back as it will reindex all the array’s elements every time it’s called. The larger the array, the slower push_front will be.

  • remove ( int position ) erase instead. Note: This method acts in-place and doesn’t return a value. Note: On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed.

  • resize ( int size ) null.

  • int rfind ( Variant what, int from=-1 ) Searches the array in reverse order. Optionally, a start search index can be passed. If negative, the start index is considered relative to the end of the array. If the adjusted start index is out of bounds, this method searches from the end of the array.

  • shuffle ( ) @GDScript.randi. Call @GDScript.randomize to ensure that a new seed will be used each time if you want non-reproducible shuffling.

  • int size ( ) Returns the number of elements in the array.

  • Array slice ( int begin, int end, int step=1, bool deep=false ) deep is true. Lower and upper index are inclusive, with the step describing the change between indices while slicing.

  • sort ( ) Sorts the array. Note: Strings are sorted in alphabetical order (as opposed to natural order). This may lead to unexpected behavior when sorting an array of strings ending with a sequence of numbers. Consider the following example:
    1. var strings = ["string1", "string2", "string10", "string11"]strings.sort()print(strings) # Prints [string1, string10, string11, string2]

  • sort_custom ( Object obj, String func ) true or false. a and b, if the given method returns true, element b will be after element a in the array. Note: You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior.
    1. class MyCustomSorter: static func sort_ascending(a, b): if a[0] < b[0]: return true return falsevar my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]my_items.sort_custom(MyCustomSorter, "sort_ascending")print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].