Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Array

Вбудована структура даних, яка містить послідовність елементів.

Опис

An array data structure that can contain a sequence of elements of any Variant type by default. Values can optionally be constrained to a specific type by creating a typed array. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.).

var array = ["First", 2, 3, "Last"]
print(array[0])  # Prints "First"
print(array[2])  # Prints 3
print(array[-1]) # Prints "Last"

array[1] = "Second"
print(array[1])  # Prints "Second"
print(array[-3]) # Prints "Second"

# This typed array can only contain integers.
# Attempting to add any other type will result in an error.
var typed_array: Array[int] = [1, 2, 3]

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: Erasing elements while iterating over arrays is not supported and will result in unpredictable behavior.

Note: In a boolean context, an array will evaluate to false if it's empty ([]). Otherwise, an array will always evaluate to true.

Differences between packed arrays, typed arrays, and untyped arrays: Packed arrays are generally faster to iterate on and modify compared to a typed array of the same type (e.g. PackedInt64Array versus Array[int]). Also, packed arrays consume less memory. As a downside, packed arrays are less flexible as they don't offer as many convenience methods such as map(). Typed arrays are in turn faster to iterate on and modify than untyped arrays.

Примітка

Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.

Конструктори

Array

Array()

Array

Array(base: Array, type: int, class_name: StringName, script: Variant)

Array

Array(from: Array)

Array

Array(from: PackedByteArray)

Array

Array(from: PackedColorArray)

Array

Array(from: PackedFloat32Array)

Array

Array(from: PackedFloat64Array)

Array

Array(from: PackedInt32Array)

Array

Array(from: PackedInt64Array)

Array

Array(from: PackedStringArray)

Array

Array(from: PackedVector2Array)

Array

Array(from: PackedVector3Array)

Array

Array(from: PackedVector4Array)

Методи

bool

all(method: Callable) const

bool

any(method: Callable) const

void

append(value: Variant)

void

append_array(array: Array)

void

assign(array: Array)

Variant

back() const

int

bsearch(value: Variant, before: bool = true) const

int

bsearch_custom(value: Variant, func: Callable, before: bool = true) const

void

clear()

int

count(value: Variant) const

Array

duplicate(deep: bool = false) const

Array

duplicate_deep(deep_subresources_mode: int = 1) const

void

erase(value: Variant)

void

fill(value: Variant)

Array

filter(method: Callable) const

int

find(what: Variant, from: int = 0) const

int

find_custom(method: Callable, from: int = 0) const

Variant

front() const

Variant

get(index: int) const

int

get_typed_builtin() const

StringName

get_typed_class_name() const

Variant

get_typed_script() const

bool

has(value: Variant) const

int

hash() const

int

insert(position: int, value: Variant)

bool

is_empty() const

bool

is_read_only() const

bool

is_same_typed(array: Array) const

bool

is_typed() const

void

make_read_only()

Array

map(method: Callable) const

Variant

max() const

Variant

min() const

Variant

pick_random() const

Variant

pop_at(position: int)

Variant

pop_back()

Variant

pop_front()

void

push_back(value: Variant)

void

push_front(value: Variant)

Variant

reduce(method: Callable, accum: Variant = null) const

void

remove_at(position: int)

int

resize(size: int)

void

reverse()

int

rfind(what: Variant, from: int = -1) const

int

rfind_custom(method: Callable, from: int = -1) const

void

set(index: int, value: Variant)

void

shuffle()

int

size() const

Array

slice(begin: int, end: int = 2147483647, step: int = 1, deep: bool = false) const

void

sort()

void

sort_custom(func: Callable)

Оператори

bool

operator !=(right: Array)

Array

operator +(right: Array)

bool

operator <(right: Array)

bool

operator <=(right: Array)

bool

operator ==(right: Array)

bool

operator >(right: Array)

bool

operator >=(right: Array)

Variant

operator [](index: int)


Описи конструкторів

Array Array() 🔗

Створює пустий Array.


Array Array(base: Array, type: int, class_name: StringName, script: Variant)

Створює типізований масив із масиву base. Типізований масив може містити лише елементи заданого типу або ті, що успадковуються від заданого класу, як описано в параметрах цього конструктора:

  • type є вбудованим типом Variant, як одна з констант Variant.Type.

  • class_name — вбудоване ім’я класу (див. Object.get_class()).

  • script пов’язаний скрипти. Це має бути екземпляр Script або null.

Якщо type не є @GlobalScope.TYPE_OBJECT, class_name має бути порожнім StringName, а script має мати значення null.

   class_name Sword
   extends Node

   class Stats:
        pass

   func _ready():
        var a = Array([], TYPE_INT, "", null) # Array[int]
        var b = Array([], TYPE_OBJECT, "Node", null) # Array[Node]
        var c = Array([], TYPE_OBJECT, "Node", Sword) # Array[Sword]
        var d = Array([], TYPE_OBJECT, "RefCounted", Stats) # Array[Stats]

За потреби елементи масиву ``base`` перетворюються. Якщо це неможливо або ``base`` уже введено, цей конструктор завершується помилкою та повертає порожній **Array**.

У GDScript цей конструктор зазвичай не потрібний, оскільки можна створити типізований масив за допомогою статичної типізації:
var numbers: Array[float] = []
var children: Array[Node] = [$Node, $Sprite2D, $RigidBody3D]

var integers: Array[int] = [0.2, 4.5, -2.0]
print(integers) # Виводить [0, 4, -2]

Array Array(from: Array)

Повертає той самий масив, що й from. Якщо вам потрібна копія масиву, використовуйте duplicate().


Array Array(from: PackedByteArray)

Створює масив із PackedByteArray.


Array Array(from: PackedColorArray)

Створює масив із PackedColorArray.


Array Array(from: PackedFloat32Array)

Створює масив із PackedFloat32Array.


Array Array(from: PackedFloat64Array)

Створює масив із PackedFloat64Array.


Array Array(from: PackedInt32Array)

Створює масив із PackedInt32Array.


Array Array(from: PackedInt64Array)

Створює масив із PackedInt64Array.


Array Array(from: PackedStringArray)

Створює масив із PackedStringArray.


Array Array(from: PackedVector2Array)

Створює масив із PackedVector2Array.


Array Array(from: PackedVector3Array)

Створює масив із PackedVector3Array.


Array Array(from: PackedVector4Array)

Створює масив із PackedVector4Array.


Описи методів

bool all(method: Callable) const 🔗

Викликає заданий Callable для кожного елемента в масиві та повертає true, якщо Callable повертає true для всіх елементів у масиві. Якщо Callable повертає false для одного або більше елементів масиву, цей метод повертає false.

method має приймати один параметр Variant (поточний елемент масиву) і повертати bool.

func greater_than_5(number):
    return number > 5

func _ready():
    print([6, 10, 6].all(greater_than_5)) # Виводить true (3/3 елементів оцінюються як true).
    print([4, 10, 4].all(greater_than_5)) # Виводить false (1/3 елементів оцінюється як true).
    print([4, 4, 4].all(greater_than_5)) # Виводить false (0/3 елементів оцінюються як true).
    print([].all(greater_than_5)) # Виводить true (0/0 елементів оцінюється як true).

    # Те саме, що й перший рядок вище, але з використанням лямбда-функції.
    print([6, 10, 6].all(func(element): return element > 5)) # Виводить true

Дивіться також any(), filter(), map() і reduce().

Примітка: На відміну від перевірки розміру масиву після filter(), цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах)

Примітка: Для порожнього масиву цей метод завжди повертає true.


bool any(method: Callable) const 🔗

Викликає наданий Callable на кожному елементі в масиві та повертає true, якщо Callable повертає true для одного чи більше елементів у масиві. Якщо Callable повертає false для всіх елементів в масиві, цей метод повертає false.

method повинен прийняти один параметр Variant (поточний елемент масиву) і повернути bool.

func more_than_5(number):
    return number > 5

func _ready():
    print([6, 10, 6].any(greater_than_5)) # Виведе true (3 елементи, для яких greater_than_5 - true).
    print([4, 10, 4].any(greater_than_5)) # Виведе true (1 елемент, для якого greater_than_5 - true).
    print([4, 4, 4].any(greater_than_5)) # Виведе false (0 елементів, для яких greater_than_5 - true).
    print([].any(greater_than_5) # Виведе false (0 елементів, для яких greater_than_5 - true).

    # Те ж, що й вище, тільки через лямбду.
    print([6, 10, 6].any(func(number): return number > 5)) # Виведе true

Дивись також all(), filter(), map() і reduce().

Примітка: На відміну від перевірки розміру масиву після filter(), цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах)

Примітка: Для порожніх масивів цей метод завжди повертає false.


void append(value: Variant) 🔗

Додає value в кінець масиву (псевдонім push_back()).


void append_array(array: Array) 🔗

Додає ще один array у кінець цього масиву.

var numbers = [1, 2, 3]
var extra = [4, 5, 6]
numbers.append_array(extra)
print(numbers) # Виводить [1, 2, 3, 4, 5, 6]

void assign(array: Array) 🔗

Присвоює цьому масиву елементи іншого array. Змінює розмір масиву відповідно до array. Виконує перетворення типів, якщо масив є типізованим.


Variant back() const 🔗

Повертає останній елемент масиву. Якщо масив порожній, не вдається і повертає null. Дивись також front().

Примітка: На відміну від ```` оператор (array[-1]), помилка генерується без виконання проекту.


int bsearch(value: Variant, before: bool = true) const 🔗

Повертає індекс value у відсортованому масиві. Якщо його не вдається знайти, повертає позицію, куди слід вставити value, щоб зберегти сортування масиву. Використовується алгоритм бінарного пошуку.

Якщо before дорівнює true (як за замовчуванням), повернений індекс знаходиться перед усіма існуючими елементами, що дорівнюють value у масиві.

var numbers = [2, 4, 8, 10]
var idx = numbers.bsearch(7)

numbers.insert(idx, 7)
print(numbers) # Виводить [2, 4, 7, 8, 10]

var fruits = ["Apple", "Lemon", "Lemon", "Orange"]
print(fruits.bsearch("Lemon", true))  # Виводить 1, вказує на перший "Lemon".
print(fruits.bsearch("Lemon", false)) # Виводить 3, вказує на "Orange".

Примітка: Виклик bsearch() для невідсортованого масиву призведе до несподіваної поведінки. Перед викликом цього методу використовуйте sort().


int bsearch_custom(value: Variant, func: Callable, before: bool = true) const 🔗

Повертає індекс value у відсортованому масиві. Якщо його неможливо знайти, повертає місце, куди слід вставити value, щоб зберегти масив упорядкованим (використовуючи func для порівняння). Використовується такий алгоритм: бінарний пошук.

Подібно до sort_custom(), func викликається необхідну кількість разів, отримуючи один елемент масиву та value як аргументи. Функція має повернути true, якщо елемент масиву має бути позаду value, інакше вона має повернути false.

Якщо before має значення true (як за замовчуванням), повернутий індекс стоїть перед усіма існуючими елементами, що дорівнюють value у масиві.

func sort_by_amount(a, b):
     If a[1] < b[1]:
         return true
     return false

func _ready():
     var my_items = [["Помідор", 2], ["Ківі", 5], ["Рис", 9]]

     var apple = ["Яблуко", 5]
     # "Яблуко" вставляється перед "Ківі".
     my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple)

     var banana = ["Банан", 5]
     # "Банан" вставляється після "Ківі".
     my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana)

     # Відбитки [["Помідор", 2], ["Яблуко", 5], ["Ківі", 5], ["Банан", 5], ["Рис", 9]]
     print (мої_предмети)

Примітка. Виклик bsearch_custom() для несортованого масиву призведе до неочікуваної поведінки. Використовуйте sort_custom() з func перед викликом цього методу.


void clear() 🔗

Видаляє всі елементи з масиву. Це еквівалентно використанню resize() із розміром 0.


int count(value: Variant) const 🔗

Повертає кількість разів, коли елемент є в масиві.

Щоб підрахувати, скільки елементів у масиві задовольняє умову, див. reduce().


Array duplicate(deep: bool = false) const 🔗

Повертає нову копію масиву.

За замовчуванням повертається неглибока копія: усі вкладені елементи Array, Dictionary та Resource спільно використовуються з оригінальним масивом. Зміна будь-якого з них в одному масиві також вплине на них в іншому.

Якщо deep має значення true, повертається копія deep: усі вкладені масиви та словники також дублюються (рекурсивно). Однак будь-який Resource все ще використовується спільно з вихідним масивом.


Array duplicate_deep(deep_subresources_mode: int = 1) const 🔗

Дублює цей масив глибоко, подібно до duplicate() при передачі true, з додатковим контролем над обробкою підресурсів.

deep_subresources_mode має бути одним зі значень з DeepDuplicateMode. За замовчуванням (рекурсивно) будуть дублюватися лише внутрішні ресурси.


void erase(value: Variant) 🔗

Знаходить і видаляє перший елемент value з масиву. Якщо value не існує в масиві, нічого не відбувається. Щоб видалити елемент за індексом, скористайтеся remove_at().

Примітка: Цей метод пересуває індекс кожного елемента після вилученого value лівіше, що може призвести до помітної втрати швидкодії, особливо на більших масивах.

Примітка: Видалення елементів під час ітерації над масивами не підтримується і призведе до непередбачуваної поведінки.


void fill(value: Variant) 🔗

Призначає задане value всім елементам у масиві.

Цей метод часто можна комбінувати з resize() для створення масиву заданого розміру та ініціалізованих елементів:

var Array = []
array.resize(5)
array.fill(2)
print(array) # Виводить [2, 2, 2, 2, 2]

Примітка: Якщо значення параметра є Variant, що передається за посиланням (похідним від об’єкта, Array, Dictionary тощо), масив буде заповнено посиланнями на те саме value, які не є дублікатами.


Array filter(method: Callable) const 🔗

Викликає задане Callable для кожного елемента масиву та повертає нове, відфільтроване значення Array.

Метод method отримує один з елементів масиву як аргумент і повинен повернути true, щоб додати елемент до відфільтрованого масиву, або false, щоб виключити його.

func is_even(number):
    return number % 2 == 0

func _ready():
    print([1, 4, 5, 8].filter(is_even)) # Prints [4, 8]

    # Same as above, but using a lambda function.
    print([1, 4, 5, 8].filter(func(number): return number % 2 == 0))

Див. також any(), all(), map() and reduce().


int find(what: Variant, from: int = 0) const 🔗

Повертає індекс першого входження what у цьому масиві або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до кінця масиву.

Примітка. Якщо ви просто хочете дізнатися, чи містить масив what, використовуйте has() (Contains у C#). У GDScript ви також можете використовувати оператор in.

Примітка: З міркувань продуктивності на пошук впливає what Variant.Type. Наприклад, 7 (int) і 7.0 (float) не вважаються однаковими для цього методу.


int find_custom(method: Callable, from: int = 0) const 🔗

Returns the index of the first element in the array that causes method to return true, or -1 if there are none. The search's start can be specified with from, continuing to the end of the array.

method is a callable that takes an element of the array, and returns a bool.

Note: If you just want to know whether the array contains anything that satisfies method, use any().

func is_even(number):
    return number % 2 == 0

func _ready():
    print([1, 3, 4, 7].find_custom(is_even.bind())) # Prints 2

# Another example using `bind()` to pass an additional parameter:
func is_specific_number(number, expected):
    return number == expected

func _ready():
    print([1, 3, 4, 7].find_custom(is_specific_number.bind(4))) # Prints 2

Variant front() const 🔗

Повертає перший елемент масиву. Якщо масив порожній, не вдається і повертає null. Дивитися також back().

Примітка: На відміну від ```` оператор (array[0]), помилка генерується без виконання проекту.


Variant get(index: int) const 🔗

Повертає елемент за заданим index у масиві. Якщо index виходить за межі або є від'ємним, цей метод завершується невдачею та повертає null.

Цей метод схожий (але не ідентичний) на оператор []. Найголовніше, що коли цей метод завершується невдачею, він не призупиняє виконання проекту, якщо його запускати з редактора.


int get_typed_builtin() const 🔗

Повертає вбудований тип Variant типізованого масиву як константу Variant.Type. Якщо масив нетипізований, повертає @GlobalScope.TYPE_NIL. Дивіться також is_typed().


StringName get_typed_class_name() const 🔗

Повертає вбудовану назву класу введеного масиву, якщо вбудований Variant тип @GlobalScope.TYPE_OBJECT. В іншому випадку повертає порожній StringName. Дивіться також is_typed() і Object.get_class().


Variant get_typed_script() const 🔗

Повертає екземпляр Script, пов’язаний із цим введеним масивом, або null, якщо він не існує. Дивіться також is_typed().


bool has(value: Variant) const 🔗

Повертає true, якщо масив містить задане value.

   [gdscript]
   print(["усередині", 7].has("усередині")) # Виводить true
   print(["усередині", 7].has("ззовні")) # Виводить false
   print(["усередині", 7].has(7)) # Виводить true
   print(["усередині", 7].has("7")) # Виводить false
   [/gdscript]
   [csharp]
   var arr = new Godot.Collections.Array { "усередині", 7 };
    // За конвенціями C# цей метод перейменовано на `Contains`.
   GD.Print(arr.Contains("усередині"));   // Виводить true
   GD.Print(arr.Contains("ззовні"));  // Виводить false
   GD.Print(arr.Contains(7));          // Виводить true
   GD.Print(arr.Contains("7"));        // Виводить false
   [/csharp][/codeblocks]

У GDScript це еквівалентно оператору [code]in[/code]:
[codeblock]
if 4 in [2, 4, 6, 8]:

print("4 тут!") # Буде надруковано.

Примітка: З міркувань продуктивності на пошук впливає тип Variant.Type для value. Наприклад, 7 (int) і 7.0 (float) не вважаються однаковими для цього методу.


int hash() const 🔗

Повертає хешоване 32-бітове ціле число, що представляє масив та його вміст.

Примітка: Масиви з однаковими хеш-значеннями не гарантовано будуть однаковими через колізії хеш-значень. Навпаки, масиви з різними хеш-значеннями гарантовано будуть різними.


int insert(position: int, value: Variant) 🔗

Вставляє новий елемент (value) в даний індекс (position) у масів. позиція параметра повинна бути між 0 і величиною методу матри. Якщо негативний, позиція параму розглядається відносно кінця масіва.

Повертає @GlobalScope.OK на успіх, або одну з інших Error константи в разі невдачі цього методу.

Приміток: Індекс кожного елементу після position повинен бути перенесений вперед, що може привести до помітних витрат на ефективність, особливо на більших масівах.


bool is_empty() const 🔗

Повертає true, якщо масив порожній ([]). Дивіться також size().


bool is_read_only() const 🔗

Повертає true, якщо масив прочитаний. Переглянути make_read_only().

У GDScript, масиви автоматично читаються, якщо заявлені з const ключове слово.


bool is_same_typed(array: Array) const 🔗

Повертає true, якщо цей масив введено так само, як заданий array. Дивіться також is_typed().


bool is_typed() const 🔗

Повертає true, якщо масив введено. Типізовані масиви можуть містити елементи лише певного типу, визначеного конструктором типізованого масиву. Очікується, що методи типізованого масиву повертатимуть загальний Variant.

У GDScript можна визначити типізований масив за допомогою статичної типізації:

var number: Array[float] = [0,2, 4,2, -2,0]
print(numbers.is_typed()) # Виводить true

void make_read_only() 🔗

Робить масив доступним лише для читання. Елементи масиву не можуть бути перевизначені іншими значеннями, а їх порядок не може змінитися. Не застосовується до вкладених елементів, таких як словники.

У GDScript масиви автоматично стають доступними лише для читання, якщо вони оголошені за допомогою ключового слова const.


Array map(method: Callable) const 🔗

Дзвінки надані Callable для кожного елемента в масиві і повертає новий масив, наповнений значеннями, подані методом method.

method повинен прийняти один параметр Variant (поточний елемент масиву) і може повернути будь-який Variant.

func double(number):
return number* 2

func _ready():
print ([1, 2, 3].map(double)) # Друки [2, 4, 6]

# Так, як вище, але за допомогою функції лямбда.
print ([1, 2, 3].map(func): зворотний елемент * 2))

Дивись також filter(), reduce(), any() і all().


Variant max() const 🔗

Повертає максимальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертає null. Дивіться також min().

Щоб знайти максимальне значення за допомогою спеціального компаратора, ви можете використовувати reduce().


Variant min() const 🔗

Повертає мінімальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертається null. Дивитися також max().


Variant pick_random() const 🔗

Повертає випадковий елемент із масиву. Генерує помилку та повертає null, якщо масив порожній.

[gdscript]
 # Може друкувати 1, 2, 3.25 або «Привіт».
print([1, 2, 3.25, "Привіт"].pick_random())
[/gdscript]
[csharp]
var array = new Godot.Collections.Array { 1, 2, 3.25f, "Привіт" };
GD.Print(array.PickRandom()); // Може друкувати 1, 2, 3.25 або "Hi".
[/csharp][/codeblocks]

[b]Примітка: [/b] Подібно до багатьох подібних функцій у системі (таких як [method @GlobalScope.randi] або [method shuffle]), цей метод використовує звичайне глобальне випадкове початкове число. Щоб отримати передбачуваний результат від цього методу, перегляньте [method @GlobalScope.seed].


Variant pop_at(position: int) 🔗

Вилучає та повертає елемент масиву за індексом position. Якщо значення від’ємне, position вважається відносно кінця масиву. Повертає null, якщо масив порожній. Якщо position виходить за межі, також генерується повідомлення про помилку.

**Примітка: ** Цей метод зсуває індекс кожного елемента після position назад, що може призвести до помітних витрат на продуктивність, особливо у великих масивах.


Variant pop_back() 🔗

Вилучає та повертає останній елемент масиву. Повертає null, якщо масив порожній, без генерування помилки. Дивіться також pop_front().


Variant pop_front() 🔗

Вилучає та повертає перший елемент масиву. Повертає null, якщо масив порожній, без генерування помилки. Дивіться також pop_back().

Примітка. Цей метод зміщує індекс кожного іншого елемента назад, що може призвести до помітних витрат на продуктивність, особливо для великих масивів.


void push_back(value: Variant) 🔗

Додає елемент в кінець масиву. Дивіться також push_front().


void push_front(value: Variant) 🔗

Додає елемент на початку масиву. Дивіться також push_back().

Примітка. Цей метод зміщує індекси кожного іншого елемента вперед, що може призвести до помітних витрат на продуктивність, особливо для великих масивів.


Variant reduce(method: Callable, accum: Variant = null) const 🔗

Викликає заданий Callable для кожного елемента в масиві, накопичує результат у accum, а потім повертає його.

Метод method приймає два аргументи: поточне значення accum і поточний елемент масиву. Якщо accum дорівнює null (як за замовчуванням), ітерація почнеться з другого елемента, а перший використовується як початкове значення accum.

func sum(accnum number):
    return accnum + number

func _ready():
    print([1, 2, 3].reduce(sum, 0)) # Виводить 6
    print([1, 2, 3].reduce(sum, 10)) # Виводить 16

    # Те саме, що й вище, але з використанням лямбда-функції.
    print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))

Якщо max() є небажаним, цей метод також можна використовувати для реалізації спеціального компаратора:

func _ready():
    var arr = [Vector2i(5, 0), Vector2i(3, 4), Vector2i(1, 2)]

    var longest_vec = arr.reduce(func(max, vec): return vec, if is_length_greater(vec, max) else max)
    print(longest_vec) # Відбитки (3, 4)

func is_length_greater(a, b):
    return a.length() > b.length()

Цей метод також можна використовувати для підрахунку кількості елементів у масиві, які задовольняють певну умову, подібно до count():

func is_even(number):
    return number% 2 == 0

func _ready():
    var arr = [1, 2, 3, 4, 5]
    # Якщо поточний елемент парний, збільште кількість, інакше залиште кількість незмінною.
    var even_count = arr.reduce(func(count, next): return count + 1 if is_even(next) else count, 0)
    print(even_count) # Виводить 2

Див. також map(), filter(), any(), and all().


void remove_at(position: int) 🔗

Видаляє елемент з масиву за заданим індексом (position). Якщо індекс виходить за межі, цей метод не працює. Якщо індекс від'ємний, position вважається відносно кінця масиву.

Якщо вам потрібно повернути видалений елемент, використовуйте метод position]. Щоб видалити елемент за значенням, використовуйте метод erase().

Примітка: Цей метод зсуває індекс кожного елемента після position назад, що може мати помітне зниження продуктивності, особливо на більших масивах.


int resize(size: int) 🔗

Встановлює кількість елементів масиву на size. Якщо size менший за поточний розмір масиву, елементи в кінці масиву видаляються. Якщо size більший, додаються нові елементи за замовчуванням (зазвичай null), залежно від типу масиву.

Повертає @GlobalScope.OK у разі успіху або одну з наступних констант Error, якщо цей метод не спрацює: @GlobalScope.ERR_LOCKED, якщо масив доступний лише для читання, @GlobalScope.ERR_INVALID_PARAMETER якщо розмір від'ємний, або @GlobalScope.ERR_OUT_OF_MEMORY, якщо розподіл пам'яті не вдався. Використовуйте size(), щоб знайти фактичний розмір масиву після зміни розміру.

Примітка: Виклик цього методу один раз і призначення нових значень відбувається швидше, ніж виклик append() для кожного нового елемента.


void reverse() 🔗

Змінює порядок усіх елементів у масиві на протилежний.


int rfind(what: Variant, from: int = -1) const 🔗

Повертає індекс останнього входження what у цьому масиві або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до початку масиву. Цей метод є зворотним до find().


int rfind_custom(method: Callable, from: int = -1) const 🔗

Повертає індекс останнього елемента масиву, який змушує method повертати true або -1, якщо їх немає. Початок пошуку можна вказати за допомогою from, продовжуючи до початку масиву. Цей метод є зворотним до find_custom().


void set(index: int, value: Variant) 🔗

Встановлює значення елемента для заданого index у задане value. Це не змінить розмір масиву, це лише змінить значення за індексом, який уже є в масиві. Це те саме, що використання оператора [] (array[index] = valve).


void shuffle() 🔗

Перемішує всі елементи масиву в довільному порядку.

Примітка: Як і багато подібних функцій у системі (наприклад, @GlobalScope.randi() або pick_random()), цей метод використовує звичайне глобальне випадкове початкове число. Щоб отримати передбачуваний результат від цього методу, перегляньте @GlobalScope.seed().


int size() const 🔗

Повертає кількість елементів у масиві. Порожні масиви ([]) завжди повертають 0. Дивіться також is_empty().


Array slice(begin: int, end: int = 2147483647, step: int = 1, deep: bool = false) const 🔗

Повертає новий Array, що містить елементи цього масиву, від індексу begin (включно) до end (виключно), кожен елемент step.

Якщо begin або end від’ємні, їхнє значення є відносно кінця масиву.

Якщо step є від’ємним, цей метод повторює масив у зворотному порядку, повертаючи фрагмент, упорядкований у зворотному порядку. Щоб це працювало, begin має бути більшим за end.

Якщо deep має значення true, усі вкладені елементи Array і Dictionary у фрагменті дублюються з оригіналу рекурсивно. Дивіться також duplicate()).

var letters = ["A", "B", "C", "D", "E", "F"]

print(letters.slice(0, 2)) # Виводить ["A", "B"]
print(letters.slice(2, -2)) # Виводить ["C", "D"]
print(letters.slice(-2, 6)) # Виводить ["E", "F"]

print(letters.slice(0, 6, 2)) # Виводить ["A", "C", "E"]
print(letters.slice(4, 1, -1)) # Виводить ["E", "D", "C"]

void sort() 🔗

Сортує масив у порядку зростання. Остаточний порядок залежить від порівняння елементів оператором "менше" (<).

var numbers = [10, 5, 2.5, 8]
numbers.sort()
print(numbers) # Виводить [2.5, 5, 8, 10]

Примітка: Використаний алгоритм сортування не є стабільним. Це означає, що порядок еквівалентних елементів (таких як 2 і 2.0) може змінитися під час виклику sort().


void sort_custom(func: Callable) 🔗

Сортує масив за допомогою спеціального Callable.

func викликається необхідну кількість разів, отримуючи два елементи масиву як аргументи. Функція має повернути true, якщо перший елемент потрібно перемістити перед другим, інакше вона має повернути false.

   func sort_ascending(a, b):
        if a[1] < b[1]:
            return true
        return false

   func _ready():
        var my_items = [["Помідор", 5], ["Яблуко", 9], ["Рис", 4]]
        my_items.sort_custom(sort_ascending)
        print(my_items) # Виводить [["Rice", 4], ["Tomato", 5], ["Apple", 9]]

        # Сортувати за спаданням, використовуючи лямбда-функцію.
        my_items.sort_custom(func(a, b): повернути a[1] > b[1])
        print(my_items) # Виводить [["Apple", 9], ["Tomato", 5], ["Rice", 4]]

Також може знадобитися використовувати цей метод для сортування рядків у природному порядку за допомогою :ref:`String.naturalnocasecmp_to()<class_String_method_naturalnocasecmp_to>`, як у наступному прикладі:
var files = ["новий файл1", "новий файл2", "новий файл10", "новий файл11"]
files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)
print(files) # Виводить ["новийфайл1", "новийфайл2", "новийфайл10", "новийфайл11"]

Примітка: у C# цей метод не підтримується.

Примітка. Використаний алгоритм сортування не є стабільним. Це означає, що значення, які вважаються рівними, можуть змінити свій порядок під час виклику цього методу.

Примітка: Ви не повинні рандомізувати значення, що повертається func, оскільки алгоритм heapsort очікує узгодженого результату. Рандомізація поверненого значення призведе до неочікуваної поведінки.


Описи операторів

bool operator !=(right: Array) 🔗

Повертає true, якщо розмір масиву або його елементи відмінні від right.


Array operator +(right: Array) 🔗

Додає масив right до лівого операнда, створюючи новий Array. Це також відомо як конкатенація масиву.

var array1 = ["Один", 2]
var array2 = [3, "Чотири"]
print(array1 + array2) # Виводить ["Один", 2, 3, "Чотири"]

Примітка. Для існуючих масивів append_array() набагато ефективніший, ніж конкатенація та присвоєння за допомогою оператора +=.


bool operator <(right: Array) 🔗

Порівнює елементи обох масивів по порядку, починаючи з індексу 0 і закінчуючи останнім спільним індексом обох масивів. Для кожної пари елементів повертає true, якщо елемент цього масиву менший за right, false, якщо цей елемент більший. В іншому випадку переходить до наступної пари.

Якщо всі шукані елементи рівні, повертає true, якщо розмір цього масиву менший за right, інакше повертає false.


bool operator <=(right: Array) 🔗

Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву менше right, false, якщо цей елемент більший. В іншому випадку продовжується наступна пара.

Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву менше або дорівнює парам прямо, інакше повертає false.


bool operator ==(right: Array) 🔗

Порівнює лівий Array з right Array. Повертає true, якщо розміри та вміст масивів рівні, у протилежному випадку false.


bool operator >(right: Array) 🔗

Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву перевищує right, false, якщо цей елемент менше. В іншому випадку продовжується наступна пара.

Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву перевищує right, інакше повертає false.


bool operator >=(right: Array) 🔗

Порівняти елементи обох масивів для того, щоб, починаючи від індексу 0 і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає true, якщо цей елемент масиву перевищує right, false, якщо цей елемент менше. В іншому випадку продовжується наступна пара.

Якщо всі пошукові елементи рівні, повертає true, якщо цей розмір масиву більше або дорівнює парам прямо, інакше повертає false.


Variant operator [](index: int) 🔗

Повертає елемент Variant вказаний index. Початок масиву в індексі 0. Якщо index більший або рівний 0, елемент виходить від початку масиву. Якщо index є негативним значенням, елемент відступається від кінця. Доступ до масиву з-під-під ключів призведе до помилки запуску часу, призупинення виконання проекту, якщо запустити з редактора.