:github_url: hide .. _class_Array: Array ===== Вбудована структура даних, яка містить послідовність елементів. .. rst-class:: classref-introduction-group Опис -------- Масив даних, який за замовчуванням може містити послідовність елементів будь-якого типу :ref:`Variant`. Значення можна обмежити певним типом, створивши *типізований масив*. Доступ до елементів здійснюється за допомогою числового індексу, що починається з ``0``. Негативні індекси використовуються для підрахунку з кінця (``-1`` — останній елемент, ``-2`` — передостанній тощо). .. tabs:: .. code-tab:: gdscript var array = ["First", 2, 3, "Last"] print(array[0]) # Виводить «First» print(array[2]) # Виводить 3 print(array[-1]) # Виводить «Last» array[1] = «Second» print(array[1]) # Виводить «Second» print(array[-3]) # Виводить «Second» # Цей типізований масив може містити тільки цілі числа. # Спроба додати будь-який інший тип призведе до помилки. var typed_array: Array[int] = [1, 2, 3] .. code-tab:: csharp Godot.Collections.Array array = ["First", 2, 3, "Last"]; GD.Print(array[0]); // Виводить "Перший" GD.Print(array[2]); // Виводить 3 GD.Print(array[^1]); // Виводить "Останній" array[1] = "Другий"; GD.Print(array[1]); // Виводить "Second" GD.Print(array[^3]); // Виводить "Second" // Цей типізований масив може містити тільки цілі числа. // Спроба додати будь-який інший тип призведе до помилки. Godot.Collections.Array typedArray = [1, 2, 3]; \ **Примітка:** Масиви завжди передаються за **посиланням**. Щоб отримати копію масиву, яку можна модифікувати незалежно від оригінального масиву, використовуйте ``метод duplicate``. \ **Примітка:** Видалення елементів під час ітерації масивів **не** підтримується і призведе до непередбачуваної поведінки. \ **Відмінності між упакованими масивами, типізованими масивами та нетипізованими масивами:** Упаковані масиви, як правило, швидше ітераються та модифікуються порівняно з типізованими масивами того ж типу (наприклад, :ref:`PackedInt64Array` проти ``Array[int]``). Крім того, упаковані масиви споживають менше пам'яті. Недоліком упакованих масивів є менша гнучкість, оскільки вони не пропонують стільки зручних методів, як :ref:`map()`. Типізовані масиви, в свою чергу, швидше ітеруються та модифікуються, ніж нетипізовані масиви. .. note:: Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:`doc_c_sharp_differences`. .. rst-class:: classref-reftable-group Конструктори ------------------------ .. table:: :widths: auto +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ base\: :ref:`Array`, type\: :ref:`int`, class_name\: :ref:`StringName`, script\: :ref:`Variant`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedByteArray`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedColorArray`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedFloat32Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedFloat64Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedInt32Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedInt64Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedStringArray`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedVector2Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedVector3Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`Array`\ (\ from\: :ref:`PackedVector4Array`\ ) | +---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-reftable-group Методи ------------ .. table:: :widths: auto +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`all`\ (\ method\: :ref:`Callable`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`any`\ (\ method\: :ref:`Callable`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`append`\ (\ value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`append_array`\ (\ array\: :ref:`Array`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`assign`\ (\ array\: :ref:`Array`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`back`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`bsearch`\ (\ value\: :ref:`Variant`, before\: :ref:`bool` = true\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`bsearch_custom`\ (\ value\: :ref:`Variant`, func\: :ref:`Callable`, before\: :ref:`bool` = true\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`clear`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`count`\ (\ value\: :ref:`Variant`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`duplicate`\ (\ deep\: :ref:`bool` = false\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`duplicate_deep`\ (\ deep_subresources_mode\: :ref:`int` = 1\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`erase`\ (\ value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`fill`\ (\ value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`filter`\ (\ method\: :ref:`Callable`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`find`\ (\ what\: :ref:`Variant`, from\: :ref:`int` = 0\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`find_custom`\ (\ method\: :ref:`Callable`, from\: :ref:`int` = 0\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`front`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`get`\ (\ index\: :ref:`int`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_typed_builtin`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`StringName` | :ref:`get_typed_class_name`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`get_typed_script`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has`\ (\ value\: :ref:`Variant`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`hash`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`insert`\ (\ position\: :ref:`int`, value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_empty`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_read_only`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_same_typed`\ (\ array\: :ref:`Array`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_typed`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`make_read_only`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`map`\ (\ method\: :ref:`Callable`\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`max`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`min`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`pick_random`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`pop_at`\ (\ position\: :ref:`int`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`pop_back`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`pop_front`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`push_back`\ (\ value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`push_front`\ (\ value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`reduce`\ (\ method\: :ref:`Callable`, accum\: :ref:`Variant` = null\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`remove_at`\ (\ position\: :ref:`int`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`resize`\ (\ size\: :ref:`int`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`reverse`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`rfind`\ (\ what\: :ref:`Variant`, from\: :ref:`int` = -1\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`rfind_custom`\ (\ method\: :ref:`Callable`, from\: :ref:`int` = -1\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set`\ (\ index\: :ref:`int`, value\: :ref:`Variant`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`shuffle`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`size`\ (\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`slice`\ (\ begin\: :ref:`int`, end\: :ref:`int` = 2147483647, step\: :ref:`int` = 1, deep\: :ref:`bool` = false\ ) |const| | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`sort`\ (\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`sort_custom`\ (\ func\: :ref:`Callable`\ ) | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-reftable-group Оператори ------------------ .. table:: :widths: auto +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator !=`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`Array` | :ref:`operator +`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator \<`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator \<=`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator ==`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator >`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`operator >=`\ (\ right\: :ref:`Array`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`operator []`\ (\ index\: :ref:`int`\ ) | +-------------------------------+----------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи конструкторів -------------------------------------- .. _class_Array_constructor_Array: .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ ) :ref:`🔗` Створює пустий **Array**. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ base\: :ref:`Array`, type\: :ref:`int`, class_name\: :ref:`StringName`, script\: :ref:`Variant`\ ) Створює типізований масив із масиву ``base``. Типізований масив може містити лише елементи заданого типу або ті, що успадковуються від заданого класу, як описано в параметрах цього конструктора: - ``type`` є вбудованим типом :ref:`Variant`, як одна з констант :ref:`Variant.Type`. - ``class_name`` — вбудоване ім’я класу (див. :ref:`Object.get_class()`). - ``script`` пов’язаний скрипти. Це має бути екземпляр :ref:`Script` або ``null``. Якщо ``type`` не є :ref:`@GlobalScope.TYPE_OBJECT`, ``class_name`` має бути порожнім :ref:`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] .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`Array`\ ) Повертає той самий масив, що й ``from``. Якщо вам потрібна копія масиву, використовуйте :ref:`duplicate()`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedByteArray`\ ) Створює масив із :ref:`PackedByteArray`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedColorArray`\ ) Створює масив із :ref:`PackedColorArray`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedFloat32Array`\ ) Створює масив із :ref:`PackedFloat32Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedFloat64Array`\ ) Створює масив із :ref:`PackedFloat64Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedInt32Array`\ ) Створює масив із :ref:`PackedInt32Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedInt64Array`\ ) Створює масив із :ref:`PackedInt64Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedStringArray`\ ) Створює масив із :ref:`PackedStringArray`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedVector2Array`\ ) Створює масив із :ref:`PackedVector2Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedVector3Array`\ ) Створює масив із :ref:`PackedVector3Array`. .. rst-class:: classref-item-separator ---- .. rst-class:: classref-constructor :ref:`Array` **Array**\ (\ from\: :ref:`PackedVector4Array`\ ) Створює масив із :ref:`PackedVector4Array`. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи методів -------------------------- .. _class_Array_method_all: .. rst-class:: classref-method :ref:`bool` **all**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`🔗` Викликає заданий :ref:`Callable` для кожного елемента в масиві та повертає ``true``, якщо :ref:`Callable` повертає ``true`` для *всіх* елементів у масиві. Якщо :ref:`Callable` повертає ``false`` для одного або більше елементів масиву, цей метод повертає ``false``. \ ``method`` має приймати один параметр :ref:`Variant` (поточний елемент масиву) і повертати :ref:`bool`. .. tabs:: .. code-tab:: gdscript 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 .. code-tab:: csharp private static bool GreaterThan5(int number) { return number > 5; } public override void _Ready() { // Виводить True (3/3 елементів оцінюються як true). GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(GreaterThan5)); // Виводить False (1/3 елементів оцінюється як true). GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }.All(GreaterThan5)); // Виводить False (0/3 елементів оцінюються як true). GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }.All(GreaterThan5)); // Виводить True (0/0 елементів оцінюється як true). GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5)); // Те саме, що й перший рядок вище, але з використанням лямбда-функції. GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => element > 5)); // Виводить True } Дивіться також :ref:`any()`, :ref:`filter()`, :ref:`map()` і :ref:`reduce()`. \ **Примітка:** На відміну від перевірки розміру масиву після :ref:`filter()`, цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах) \ **Примітка:** Для порожнього масиву цей метод `завжди `__ повертає ``true``. .. rst-class:: classref-item-separator ---- .. _class_Array_method_any: .. rst-class:: classref-method :ref:`bool` **any**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`🔗` Викликає наданий :ref:`Callable` на кожному елементі в масиві та повертає ``true``, якщо :ref:`Callable` повертає ``true`` для *одного чи більше* елементів у масиві. Якщо :ref:`Callable` повертає ``false`` для всіх елементів в масиві, цей метод повертає ``false``. \ ``method`` повинен прийняти один параметр :ref:`Variant` (поточний елемент масиву) і повернути :ref:`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 Дивись також :ref:`all()`, :ref:`filter()`, :ref:`map()` і :ref:`reduce()`. \ **Примітка:** На відміну від перевірки розміру масиву після :ref:`filter()`, цей метод поверне значення якмога швидше для поліпшення швидкодії (особливо на великих масивах) \ **Примітка:** Для порожніх масивів цей метод завжди повертає ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_method_append: .. rst-class:: classref-method |void| **append**\ (\ value\: :ref:`Variant`\ ) :ref:`🔗` Додає ``value`` в кінець масиву (псевдонім :ref:`push_back()`). .. rst-class:: classref-item-separator ---- .. _class_Array_method_append_array: .. rst-class:: classref-method |void| **append_array**\ (\ array\: :ref:`Array`\ ) :ref:`🔗` Додає ще один ``array`` у кінець цього масиву. :: var numbers = [1, 2, 3] var extra = [4, 5, 6] numbers.append_array(extra) print(numbers) # Виводить [1, 2, 3, 4, 5, 6] .. rst-class:: classref-item-separator ---- .. _class_Array_method_assign: .. rst-class:: classref-method |void| **assign**\ (\ array\: :ref:`Array`\ ) :ref:`🔗` Присвоює цьому масиву елементи іншого ``array``. Змінює розмір масиву відповідно до ``array``. Виконує перетворення типів, якщо масив є типізованим. .. rst-class:: classref-item-separator ---- .. _class_Array_method_back: .. rst-class:: classref-method :ref:`Variant` **back**\ (\ ) |const| :ref:`🔗` Повертає останній елемент масиву. Якщо масив порожній, не вдається і повертає ``null``. Дивись також :ref:`front()`. \ **Примітка:** На відміну від ```` оператор (``array[-1]``), помилка генерується без виконання проекту. .. rst-class:: classref-item-separator ---- .. _class_Array_method_bsearch: .. rst-class:: classref-method :ref:`int` **bsearch**\ (\ value\: :ref:`Variant`, before\: :ref:`bool` = true\ ) |const| :ref:`🔗` Повертає індекс ``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 = ["Апельсин", "Лимон", "Лимон", "Яблуко"] print(fruits.bsearch("Лимон", true)) # Виводить 1, вказуючи на перший "Лимон". print(fruits.bsearch("Лимон", false)) # Виводить 3, вказує на "Яблуко". \ **Примітка:** Виклик :ref:`bsearch()` для *несортованого* масиву призведе до неочікуваної поведінки. Використовуйте :ref:`sort()` перед викликом цього методу. .. rst-class:: classref-item-separator ---- .. _class_Array_method_bsearch_custom: .. rst-class:: classref-method :ref:`int` **bsearch_custom**\ (\ value\: :ref:`Variant`, func\: :ref:`Callable`, before\: :ref:`bool` = true\ ) |const| :ref:`🔗` Повертає індекс ``value`` у відсортованому масиві. Якщо його неможливо знайти, повертає місце, куди слід вставити ``value``, щоб зберегти масив упорядкованим (використовуючи ``func`` для порівняння). Використовується такий алгоритм: `бінарний пошук `__. Подібно до :ref:`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 (мої_предмети) \ **Примітка.** Виклик :ref:`bsearch_custom()` для *несортованого* масиву призведе до неочікуваної поведінки. Використовуйте :ref:`sort_custom()` з ``func`` перед викликом цього методу. .. rst-class:: classref-item-separator ---- .. _class_Array_method_clear: .. rst-class:: classref-method |void| **clear**\ (\ ) :ref:`🔗` Видаляє всі елементи з масиву. Це еквівалентно використанню :ref:`resize()` із розміром ``0``. .. rst-class:: classref-item-separator ---- .. _class_Array_method_count: .. rst-class:: classref-method :ref:`int` **count**\ (\ value\: :ref:`Variant`\ ) |const| :ref:`🔗` Повертає кількість разів, коли елемент є в масиві. Щоб підрахувати, скільки елементів у масиві задовольняє умову, див. :ref:`reduce()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_duplicate: .. rst-class:: classref-method :ref:`Array` **duplicate**\ (\ deep\: :ref:`bool` = false\ ) |const| :ref:`🔗` Повертає нову копію масиву. За замовчуванням повертається **неглибока** копія: усі вкладені елементи **Array**, :ref:`Dictionary` та :ref:`Resource` спільно використовуються з оригінальним масивом. Зміна будь-якого з них в одному масиві також вплине на них в іншому. Якщо ``deep`` має значення ``true``, повертається копія **deep**: усі вкладені масиви та словники також дублюються (рекурсивно). Однак будь-який :ref:`Resource` все ще використовується спільно з вихідним масивом. .. rst-class:: classref-item-separator ---- .. _class_Array_method_duplicate_deep: .. rst-class:: classref-method :ref:`Array` **duplicate_deep**\ (\ deep_subresources_mode\: :ref:`int` = 1\ ) |const| :ref:`🔗` Duplicates this array, deeply, like :ref:`duplicate()` when passing ``true``, with extra control over how subresources are handled. \ ``deep_subresources_mode`` must be one of the values from :ref:`DeepDuplicateMode`. By default, only internal resources will be duplicated (recursively). .. rst-class:: classref-item-separator ---- .. _class_Array_method_erase: .. rst-class:: classref-method |void| **erase**\ (\ value\: :ref:`Variant`\ ) :ref:`🔗` Знаходить і видаляє перший елемент ``value`` з масиву. Якщо ``value`` не існує в масиві, нічого не відбувається. Щоб видалити елемент за індексом, скористайтеся :ref:`remove_at()`. \ **Примітка:** Цей метод пересуває індекс кожного елемента після вилученого ``value`` лівіше, що може призвести до помітної втрати швидкодії, особливо на більших масивах. \ **Примітка:** Видалення елементів під час ітерації над масивами **не** підтримується і призведе до непередбачуваної поведінки. .. rst-class:: classref-item-separator ---- .. _class_Array_method_fill: .. rst-class:: classref-method |void| **fill**\ (\ value\: :ref:`Variant`\ ) :ref:`🔗` Призначає задане ``value`` всім елементам у масиві. Цей метод часто можна комбінувати з :ref:`resize()` для створення масиву заданого розміру та ініціалізованих елементів: .. tabs:: .. code-tab:: gdscript var Array = [] array.resize(5) array.fill(2) print(array) # Виводить [2, 2, 2, 2, 2] .. code-tab:: csharp Godot.Collections.Array array = []; array.Resize(5); array.Fill(2); GD.Print(масив); // Виводить [2, 2, 2, 2, 2] \ **Примітка:** Якщо ``значення параметра`` є :ref:`Variant`, що передається за посиланням (похідним від ``об’єкта``, **Array**, :ref:`Dictionary` тощо), масив буде заповнено посиланнями на те саме ``value``, які не є дублікатами. .. rst-class:: classref-item-separator ---- .. _class_Array_method_filter: .. rst-class:: classref-method :ref:`Array` **filter**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`🔗` Викликає задане :ref:`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)) Див. також :ref:`any()`, :ref:`all()`, :ref:`map()` and :ref:`reduce()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_find: .. rst-class:: classref-method :ref:`int` **find**\ (\ what\: :ref:`Variant`, from\: :ref:`int` = 0\ ) |const| :ref:`🔗` Повертає індекс **першого** входження ``what`` у цьому масиві або ``-1``, якщо їх немає. Початок пошуку можна вказати за допомогою ``from``, продовжуючи до кінця масиву. \ **Примітка.** Якщо ви просто хочете дізнатися, чи містить масив ``what``, використовуйте :ref:`has()` (``Contains`` у C#). У GDScript ви також можете використовувати оператор ``in``. \ **Примітка:** З міркувань продуктивності на пошук впливає ``what`` :ref:`Variant.Type`. Наприклад, ``7`` (:ref:`int`) і ``7.0`` (:ref:`float`) не вважаються однаковими для цього методу. .. rst-class:: classref-item-separator ---- .. _class_Array_method_find_custom: .. rst-class:: classref-method :ref:`int` **find_custom**\ (\ method\: :ref:`Callable`, from\: :ref:`int` = 0\ ) |const| :ref:`🔗` Повертає індекс **першого** елемента в масиві, який змушує ``method`` повертати ``true`` або ``-1``, якщо їх немає. Початок пошуку можна вказати за допомогою ``from``, продовжуючи до кінця масиву. \ ``method`` — це виклик, який приймає елемент масиву та повертає :ref:`bool`. \ **Примітка:** Якщо ви просто хочете знати, чи містить масив *щось*, що задовольняє ``method``, використовуйте :ref:`any()`. .. tabs:: .. code-tab:: gdscript func is_even(число): return number% 2 == 0 func _ready(): print([1, 3, 4, 7].find_custom(is_even.bind())) # Виводить 2 .. rst-class:: classref-item-separator ---- .. _class_Array_method_front: .. rst-class:: classref-method :ref:`Variant` **front**\ (\ ) |const| :ref:`🔗` Повертає перший елемент масиву. Якщо масив порожній, не вдається і повертає ``null``. Дивитися також :ref:`back()`. \ **Примітка:** На відміну від ```` оператор (``array[0]``), помилка генерується без виконання проекту. .. rst-class:: classref-item-separator ---- .. _class_Array_method_get: .. rst-class:: classref-method :ref:`Variant` **get**\ (\ index\: :ref:`int`\ ) |const| :ref:`🔗` Returns the element at the given ``index`` in the array. If ``index`` is out-of-bounds or negative, this method fails and returns ``null``. This method is similar (but not identical) to the ``[]`` operator. Most notably, when this method fails, it doesn't pause project execution if run from the editor. .. rst-class:: classref-item-separator ---- .. _class_Array_method_get_typed_builtin: .. rst-class:: classref-method :ref:`int` **get_typed_builtin**\ (\ ) |const| :ref:`🔗` Повертає вбудований тип :ref:`Variant` типізованого масиву як константу :ref:`Variant.Type`. Якщо масив нетипізований, повертає :ref:`@GlobalScope.TYPE_NIL`. Дивіться також :ref:`is_typed()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_get_typed_class_name: .. rst-class:: classref-method :ref:`StringName` **get_typed_class_name**\ (\ ) |const| :ref:`🔗` Повертає **вбудовану** назву класу введеного масиву, якщо вбудований :ref:`Variant` тип :ref:`@GlobalScope.TYPE_OBJECT`. В іншому випадку повертає порожній :ref:`StringName`. Дивіться також :ref:`is_typed()` і :ref:`Object.get_class()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_get_typed_script: .. rst-class:: classref-method :ref:`Variant` **get_typed_script**\ (\ ) |const| :ref:`🔗` Повертає екземпляр :ref:`Script`, пов’язаний із цим введеним масивом, або ``null``, якщо він не існує. Дивіться також :ref:`is_typed()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_has: .. rst-class:: classref-method :ref:`bool` **has**\ (\ value\: :ref:`Variant`\ ) |const| :ref:`🔗` Повертає ``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 тут!") # Буде надруковано. \ **Примітка:** З міркувань продуктивності на пошук впливає тип :ref:`Variant.Type` для ``value``. Наприклад, ``7`` (:ref:`int`) і ``7.0`` (:ref:`float`) не вважаються однаковими для цього методу. .. rst-class:: classref-item-separator ---- .. _class_Array_method_hash: .. rst-class:: classref-method :ref:`int` **hash**\ (\ ) |const| :ref:`🔗` Returns a hashed 32-bit integer value representing the array and its contents. \ **Note:** Arrays with equal hash values are *not* guaranteed to be the same, as a result of hash collisions. On the contrary, arrays with different hash values are guaranteed to be different. .. rst-class:: classref-item-separator ---- .. _class_Array_method_insert: .. rst-class:: classref-method :ref:`int` **insert**\ (\ position\: :ref:`int`, value\: :ref:`Variant`\ ) :ref:`🔗` Вставляє новий елемент (``value``) в даний індекс (``position``) у масів. ``позиція параметра`` повинна бути між ``0`` і величиною методу матри. Якщо негативний, ``позиція параму`` розглядається відносно кінця масіва. Повертає :ref:`@GlobalScope.OK` на успіх, або одну з інших :ref:`Error` константи в разі невдачі цього методу. \ **Приміток:** Індекс кожного елементу після ``position`` повинен бути перенесений вперед, що може привести до помітних витрат на ефективність, особливо на більших масівах. .. rst-class:: classref-item-separator ---- .. _class_Array_method_is_empty: .. rst-class:: classref-method :ref:`bool` **is_empty**\ (\ ) |const| :ref:`🔗` Повертає ``true``, якщо масив порожній (``[]``). Дивіться також :ref:`size()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_is_read_only: .. rst-class:: classref-method :ref:`bool` **is_read_only**\ (\ ) |const| :ref:`🔗` Повертає ``true``, якщо масив прочитаний. Переглянути :ref:`make_read_only()`. У GDScript, масиви автоматично читаються, якщо заявлені з ``const`` ключове слово. .. rst-class:: classref-item-separator ---- .. _class_Array_method_is_same_typed: .. rst-class:: classref-method :ref:`bool` **is_same_typed**\ (\ array\: :ref:`Array`\ ) |const| :ref:`🔗` Повертає ``true``, якщо цей масив введено так само, як заданий ``array``. Дивіться також :ref:`is_typed()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_is_typed: .. rst-class:: classref-method :ref:`bool` **is_typed**\ (\ ) |const| :ref:`🔗` Повертає ``true``, якщо масив введено. Типізовані масиви можуть містити елементи лише певного типу, визначеного конструктором типізованого масиву. Очікується, що методи типізованого масиву повертатимуть загальний :ref:`Variant`. У GDScript можна визначити типізований масив за допомогою статичної типізації: :: var number: Array[float] = [0,2, 4,2, -2,0] print(numbers.is_typed()) # Виводить true .. rst-class:: classref-item-separator ---- .. _class_Array_method_make_read_only: .. rst-class:: classref-method |void| **make_read_only**\ (\ ) :ref:`🔗` Робить масив доступним лише для читання. Елементи масиву не можуть бути перевизначені іншими значеннями, а їх порядок не може змінитися. Не застосовується до вкладених елементів, таких як словники. У GDScript масиви автоматично стають доступними лише для читання, якщо вони оголошені за допомогою ключового слова ``const``. .. rst-class:: classref-item-separator ---- .. _class_Array_method_map: .. rst-class:: classref-method :ref:`Array` **map**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`🔗` Дзвінки надані :ref:`Callable` для кожного елемента в масиві і повертає новий масив, наповнений значеннями, подані методом ``method``. \ ``method`` повинен прийняти один параметр :ref:`Variant` (поточний елемент масиву) і може повернути будь-який :ref:`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)) Дивись також :ref:`filter()`, :ref:`reduce()`, :ref:`any()` і :ref:`all()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_max: .. rst-class:: classref-method :ref:`Variant` **max**\ (\ ) |const| :ref:`🔗` Повертає максимальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертає ``null``. Дивіться також :ref:`min()`. Щоб знайти максимальне значення за допомогою спеціального компаратора, ви можете використовувати :ref:`reduce()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_min: .. rst-class:: classref-method :ref:`Variant` **min**\ (\ ) |const| :ref:`🔗` Повертає мінімальне значення, що міститься в масиві, якщо всі елементи можна порівняти. В іншому випадку повертається ``null``. Дивитися також :ref:`max()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_pick_random: .. rst-class:: classref-method :ref:`Variant` **pick_random**\ (\ ) |const| :ref:`🔗` Повертає випадковий елемент із масиву. Генерує помилку та повертає ``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]. .. rst-class:: classref-item-separator ---- .. _class_Array_method_pop_at: .. rst-class:: classref-method :ref:`Variant` **pop_at**\ (\ position\: :ref:`int`\ ) :ref:`🔗` Вилучає та повертає елемент масиву за індексом ``position``. Якщо значення від’ємне, ``position`` вважається відносно кінця масиву. Повертає ``null``, якщо масив порожній. Якщо ``position`` виходить за межі, також генерується повідомлення про помилку. \ **Примітка: ** Цей метод зсуває індекс кожного елемента після ``position`` назад, що може призвести до помітних витрат на продуктивність, особливо у великих масивах. .. rst-class:: classref-item-separator ---- .. _class_Array_method_pop_back: .. rst-class:: classref-method :ref:`Variant` **pop_back**\ (\ ) :ref:`🔗` Вилучає та повертає останній елемент масиву. Повертає ``null``, якщо масив порожній, без генерування помилки. Дивіться також :ref:`pop_front()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_pop_front: .. rst-class:: classref-method :ref:`Variant` **pop_front**\ (\ ) :ref:`🔗` Вилучає та повертає перший елемент масиву. Повертає ``null``, якщо масив порожній, без генерування помилки. Дивіться також :ref:`pop_back()`. \ **Примітка.** Цей метод зміщує індекс кожного іншого елемента назад, що може призвести до помітних витрат на продуктивність, особливо для великих масивів. .. rst-class:: classref-item-separator ---- .. _class_Array_method_push_back: .. rst-class:: classref-method |void| **push_back**\ (\ value\: :ref:`Variant`\ ) :ref:`🔗` Додає елемент в кінець масиву. Дивіться також :ref:`push_front()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_push_front: .. rst-class:: classref-method |void| **push_front**\ (\ value\: :ref:`Variant`\ ) :ref:`🔗` Додає елемент на початку масиву. Дивіться також :ref:`push_back()`. \ **Примітка.** Цей метод зміщує індекси кожного іншого елемента вперед, що може призвести до помітних витрат на продуктивність, особливо для великих масивів. .. rst-class:: classref-item-separator ---- .. _class_Array_method_reduce: .. rst-class:: classref-method :ref:`Variant` **reduce**\ (\ method\: :ref:`Callable`, accum\: :ref:`Variant` = null\ ) |const| :ref:`🔗` Викликає заданий :ref:`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)) Якщо :ref:`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() Цей метод також можна використовувати для підрахунку кількості елементів у масиві, які задовольняють певну умову, подібно до :ref:`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 Див. також :ref:`map()`, :ref:`filter()`, :ref:`any()`, and :ref:`all()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_remove_at: .. rst-class:: classref-method |void| **remove_at**\ (\ position\: :ref:`int`\ ) :ref:`🔗` Removes the element from the array at the given index (``position``). If the index is out of bounds, this method fails. If the index is negative, ``position`` is considered relative to the end of the array. If you need to return the removed element, use :ref:`pop_at()`. To remove an element by value, use :ref:`erase()` instead. \ **Note:** This method shifts every element's index after ``position`` back, which may have a noticeable performance cost, especially on larger arrays. .. rst-class:: classref-item-separator ---- .. _class_Array_method_resize: .. rst-class:: classref-method :ref:`int` **resize**\ (\ size\: :ref:`int`\ ) :ref:`🔗` Встановлює кількість елементів масиву на ``size``. Якщо ``size`` менший за поточний розмір масиву, елементи в кінці масиву видаляються. Якщо ``size`` більший, додаються нові елементи за замовчуванням (зазвичай ``null``), залежно від типу масиву. Повертає :ref:`@GlobalScope.OK` у разі успіху або одну з наступних констант :ref:`Error`, якщо цей метод не спрацює: :ref:`@GlobalScope.ERR_LOCKED`, якщо масив доступний лише для читання, :ref:`@GlobalScope.ERR_INVALID_PARAMETER` якщо розмір від'ємний, або :ref:`@GlobalScope.ERR_OUT_OF_MEMORY`, якщо розподіл пам'яті не вдався. Використовуйте :ref:`size()`, щоб знайти фактичний розмір масиву після зміни розміру. \ **Примітка:** Виклик цього методу один раз і призначення нових значень відбувається швидше, ніж виклик :ref:`append()` для кожного нового елемента. .. rst-class:: classref-item-separator ---- .. _class_Array_method_reverse: .. rst-class:: classref-method |void| **reverse**\ (\ ) :ref:`🔗` Змінює порядок усіх елементів у масиві на протилежний. .. rst-class:: classref-item-separator ---- .. _class_Array_method_rfind: .. rst-class:: classref-method :ref:`int` **rfind**\ (\ what\: :ref:`Variant`, from\: :ref:`int` = -1\ ) |const| :ref:`🔗` Повертає індекс **останнього** входження ``what`` у цьому масиві або ``-1``, якщо їх немає. Початок пошуку можна вказати за допомогою ``from``, продовжуючи до початку масиву. Цей метод є зворотним до :ref:`find()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_rfind_custom: .. rst-class:: classref-method :ref:`int` **rfind_custom**\ (\ method\: :ref:`Callable`, from\: :ref:`int` = -1\ ) |const| :ref:`🔗` Повертає індекс **останнього** елемента масиву, який змушує ``method`` повертати ``true`` або ``-1``, якщо їх немає. Початок пошуку можна вказати за допомогою ``from``, продовжуючи до початку масиву. Цей метод є зворотним до :ref:`find_custom()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_set: .. rst-class:: classref-method |void| **set**\ (\ index\: :ref:`int`, value\: :ref:`Variant`\ ) :ref:`🔗` Встановлює значення елемента для заданого ``index`` у задане ``value``. Це не змінить розмір масиву, це лише змінить значення за індексом, який уже є в масиві. Це те саме, що використання оператора ``[]`` (``array[index] = valve``). .. rst-class:: classref-item-separator ---- .. _class_Array_method_shuffle: .. rst-class:: classref-method |void| **shuffle**\ (\ ) :ref:`🔗` Перемішує всі елементи масиву в довільному порядку. \ **Примітка:** Як і багато подібних функцій у системі (наприклад, :ref:`@GlobalScope.randi()` або :ref:`pick_random()`), цей метод використовує звичайне глобальне випадкове початкове число. Щоб отримати передбачуваний результат від цього методу, перегляньте :ref:`@GlobalScope.seed()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_size: .. rst-class:: classref-method :ref:`int` **size**\ (\ ) |const| :ref:`🔗` Повертає кількість елементів у масиві. Порожні масиви (``[]``) завжди повертають ``0``. Дивіться також :ref:`is_empty()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_slice: .. rst-class:: classref-method :ref:`Array` **slice**\ (\ begin\: :ref:`int`, end\: :ref:`int` = 2147483647, step\: :ref:`int` = 1, deep\: :ref:`bool` = false\ ) |const| :ref:`🔗` Повертає новий **Array**, що містить елементи цього масиву, від індексу ``begin`` (включно) до ``end`` (виключно), кожен елемент ``step``. Якщо ``begin`` або ``end`` від’ємні, їхнє значення є відносно кінця масиву. Якщо ``step`` є від’ємним, цей метод повторює масив у зворотному порядку, повертаючи фрагмент, упорядкований у зворотному порядку. Щоб це працювало, ``begin`` має бути більшим за ``end``. Якщо ``deep`` має значення ``true``, усі вкладені елементи **Array** і :ref:`Dictionary` у фрагменті дублюються з оригіналу рекурсивно. Дивіться також :ref:`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"] .. rst-class:: classref-item-separator ---- .. _class_Array_method_sort: .. rst-class:: classref-method |void| **sort**\ (\ ) :ref:`🔗` Сортує масив у порядку зростання. Остаточний порядок залежить від порівняння елементів оператором "менше" (``<``). .. tabs:: .. code-tab:: gdscript var numbers = [10, 5, 2.5, 8] numbers.sort() print(numbers) # Виводить [2.5, 5, 8, 10] .. code-tab:: csharp Godot.Collections.Array numbers = [10, 5, 2.5, 8]; numbers.Sort(); GD.Print(числа); // Виводить [2.5, 5, 8, 10] \ **Примітка:** Використаний алгоритм сортування не є `стабільним `__. Це означає, що порядок еквівалентних елементів (таких як ``2`` і ``2.0``) може змінитися під час виклику :ref:`sort()`. .. rst-class:: classref-item-separator ---- .. _class_Array_method_sort_custom: .. rst-class:: classref-method |void| **sort_custom**\ (\ func\: :ref:`Callable`\ ) :ref:`🔗` Сортує масив за допомогою спеціального :ref:`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()`, як у наступному прикладі: :: 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 очікує узгодженого результату. Рандомізація поверненого значення призведе до неочікуваної поведінки. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи операторів -------------------------------- .. _class_Array_operator_neq_Array: .. rst-class:: classref-operator :ref:`bool` **operator !=**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Повертає ``true``, якщо розмір масиву або його елементи відмінні від ``right``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_sum_Array: .. rst-class:: classref-operator :ref:`Array` **operator +**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Додає масив ``right`` до лівого операнда, створюючи новий **Array**. Це також відомо як конкатенація масиву. .. tabs:: .. code-tab:: gdscript var array1 = ["Один", 2] var array2 = [3, "Чотири"] print(array1 + array2) # Виводить ["Один", 2, 3, "Чотири"] .. code-tab:: csharp // Зауважте, що конкатенація неможлива з власним типом масиву C#. var array1 = new Godot.Collections.Array{"One", 2}; var array2 = new Godot.Collections.Array{3, "Four"}; GD.Print(Areay1 + Array2); // Виводить ["One", 2, 3, "Four"] \ **Примітка.** Для існуючих масивів :ref:`append_array()` набагато ефективніший, ніж конкатенація та присвоєння за допомогою оператора ``+=``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_lt_Array: .. rst-class:: classref-operator :ref:`bool` **operator <**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Порівнює елементи обох масивів по порядку, починаючи з індексу ``0`` і закінчуючи останнім спільним індексом обох масивів. Для кожної пари елементів повертає ``true``, якщо елемент цього масиву менший за ``right``, ``false``, якщо цей елемент більший. В іншому випадку переходить до наступної пари. Якщо всі шукані елементи рівні, повертає ``true``, якщо розмір цього масиву менший за ``right``, інакше повертає ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_lte_Array: .. rst-class:: classref-operator :ref:`bool` **operator <=**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Порівняти елементи обох масивів для того, щоб, починаючи від індексу ``0`` і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає ``true``, якщо цей елемент масиву менше ``right``, ``false``, якщо цей елемент більший. В іншому випадку продовжується наступна пара. Якщо всі пошукові елементи рівні, повертає ``true``, якщо цей розмір масиву менше або дорівнює ``парам прямо``, інакше повертає ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_eq_Array: .. rst-class:: classref-operator :ref:`bool` **operator ==**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Порівнює лівий **Array** з ``right`` **Array**. Повертає ``true``, якщо розміри та вміст масивів рівні, у протилежному випадку ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_gt_Array: .. rst-class:: classref-operator :ref:`bool` **operator >**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Порівняти елементи обох масивів для того, щоб, починаючи від індексу ``0`` і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає ``true``, якщо цей елемент масиву перевищує ``right``, ``false``, якщо цей елемент менше. В іншому випадку продовжується наступна пара. Якщо всі пошукові елементи рівні, повертає ``true``, якщо цей розмір масиву перевищує ``right``, інакше повертає ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_gte_Array: .. rst-class:: classref-operator :ref:`bool` **operator >=**\ (\ right\: :ref:`Array`\ ) :ref:`🔗` Порівняти елементи обох масивів для того, щоб, починаючи від індексу ``0`` і закінчуючи останнього індексу в загальному між масивами. Для кожної пари елементів, повертає ``true``, якщо цей елемент масиву перевищує ``right``, ``false``, якщо цей елемент менше. В іншому випадку продовжується наступна пара. Якщо всі пошукові елементи рівні, повертає ``true``, якщо цей розмір масиву більше або дорівнює ``парам прямо``, інакше повертає ``false``. .. rst-class:: classref-item-separator ---- .. _class_Array_operator_idx_int: .. rst-class:: classref-operator :ref:`Variant` **operator []**\ (\ index\: :ref:`int`\ ) :ref:`🔗` Повертає елемент :ref:`Variant` вказаний ``index``. Початок масиву в індексі 0. Якщо ``index`` більший або рівний ``0``, елемент виходить від початку масиву. Якщо ``index`` є негативним значенням, елемент відступається від кінця. Доступ до масиву з-під-під ключів призведе до помилки запуску часу, призупинення виконання проекту, якщо запустити з редактора. .. |virtual| replace:: :abbr:`virtual (Зазвичай, цей метод перевизначається користувачем, щоб він мав вплив.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Цей метод не має побічних ефектів. Не змінює ніяку змінну екземпляра об'єкта.)` .. |vararg| replace:: :abbr:`vararg (Цей метод приймає будь-яке число аргументів після описаних тут.)` .. |constructor| replace:: :abbr:`constructor (Цей метод використовується для побудови типів.)` .. |static| replace:: :abbr:`static (Цей метод не потребує екземпляра для виклику, його можна викликати безпосередньо за допомогою назви класу.)` .. |operator| replace:: :abbr:`operator (Цей метод описує дійсний оператор для взаємодії з цим типом як з лівим операндом.)` .. |bitfield| replace:: :abbr:`BitField (Це значення є цілим числом, складеним у вигляді бітової маски з наступних прапорів.)` .. |void| replace:: :abbr:`void (Значення не повертається.)`