mirror of
https://github.com/godotengine/godot-docs-l10n.git
synced 2025-12-31 09:49:22 +03:00
1567 lines
102 KiB
ReStructuredText
1567 lines
102 KiB
ReStructuredText
:github_url: hide
|
||
|
||
.. _class_Array:
|
||
|
||
Array
|
||
=====
|
||
|
||
Встроенная структура данных, содержащая последовательность элементов.
|
||
|
||
.. rst-class:: classref-introduction-group
|
||
|
||
Описание
|
||
----------------
|
||
|
||
Структура данных массива, которая по умолчанию может содержать последовательность элементов любого типа :ref:`Variant<class_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]); // Выводит "First"
|
||
GD.Print(array[2]); // Выводит 3
|
||
GD.Print(array[^1]); // Выводит "Last"
|
||
|
||
array[1] = "Second";
|
||
GD.Print(array[1]); // Выводит "Second"
|
||
GD.Print(array[^3]); // Выводит "Second"
|
||
|
||
// Этот типизированный массив может содержать только целые числа.
|
||
// Попытка добавить любой другой тип приведет к ошибке.
|
||
Godot.Collections.Array<int> typedArray = [1, 2, 3];
|
||
|
||
|
||
|
||
\ **Примечание:** Массивы всегда передаются по **ссылке**. Чтобы получить копию массива, которую можно изменять независимо от исходного, используйте :ref:`duplicate()<class_Array_method_duplicate>`.
|
||
|
||
\ **Примечание:** Удаление элементов при итерации по массивам **не** поддерживается и приведёт к непредсказуемому поведению.
|
||
|
||
\ **Различия между упакованными, типизированными и нетипизированными массивами:** Упакованные массивы, как правило, быстрее итерируются и изменяются по сравнению с типизированными массивами того же типа (например, :ref:`PackedInt64Array<class_PackedInt64Array>` против ``Array[int]``). Кроме того, упакованные массивы потребляют меньше памяти. Недостатком упакованных массивов является их меньшая гибкость, поскольку они не предлагают столько удобных методов, как :ref:`map()<class_Array_method_map>`. Типизированные массивы, в свою очередь, быстрее итерируются и изменяются, чем нетипизированные массивы.
|
||
|
||
.. note::
|
||
|
||
Существуют заметные различия при использовании данного API с C#. Подробнее см. :ref:`doc_c_sharp_differences`.
|
||
|
||
.. rst-class:: classref-reftable-group
|
||
|
||
Конструкторы
|
||
------------------------
|
||
|
||
.. table::
|
||
:widths: auto
|
||
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ base\: :ref:`Array<class_Array>`, type\: :ref:`int<class_int>`, class_name\: :ref:`StringName<class_StringName>`, script\: :ref:`Variant<class_Variant>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`Array<class_Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedColorArray<class_PackedColorArray>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedFloat64Array<class_PackedFloat64Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedInt64Array<class_PackedInt64Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedStringArray<class_PackedStringArray>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedVector3Array<class_PackedVector3Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>`\ (\ from\: :ref:`PackedVector4Array<class_PackedVector4Array>`\ ) |
|
||
+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
|
||
.. rst-class:: classref-reftable-group
|
||
|
||
Методы
|
||
------------
|
||
|
||
.. table::
|
||
:widths: auto
|
||
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`all<class_Array_method_all>`\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`any<class_Array_method_any>`\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`append<class_Array_method_append>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`append_array<class_Array_method_append_array>`\ (\ array\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`assign<class_Array_method_assign>`\ (\ array\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`back<class_Array_method_back>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`bsearch<class_Array_method_bsearch>`\ (\ value\: :ref:`Variant<class_Variant>`, before\: :ref:`bool<class_bool>` = true\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`bsearch_custom<class_Array_method_bsearch_custom>`\ (\ value\: :ref:`Variant<class_Variant>`, func\: :ref:`Callable<class_Callable>`, before\: :ref:`bool<class_bool>` = true\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`clear<class_Array_method_clear>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`count<class_Array_method_count>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`duplicate<class_Array_method_duplicate>`\ (\ deep\: :ref:`bool<class_bool>` = false\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`duplicate_deep<class_Array_method_duplicate_deep>`\ (\ deep_subresources_mode\: :ref:`int<class_int>` = 1\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`erase<class_Array_method_erase>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`fill<class_Array_method_fill>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`filter<class_Array_method_filter>`\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`find<class_Array_method_find>`\ (\ what\: :ref:`Variant<class_Variant>`, from\: :ref:`int<class_int>` = 0\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`find_custom<class_Array_method_find_custom>`\ (\ method\: :ref:`Callable<class_Callable>`, from\: :ref:`int<class_int>` = 0\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`front<class_Array_method_front>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`get<class_Array_method_get>`\ (\ index\: :ref:`int<class_int>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`get_typed_builtin<class_Array_method_get_typed_builtin>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`StringName<class_StringName>` | :ref:`get_typed_class_name<class_Array_method_get_typed_class_name>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`get_typed_script<class_Array_method_get_typed_script>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`has<class_Array_method_has>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`hash<class_Array_method_hash>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`insert<class_Array_method_insert>`\ (\ position\: :ref:`int<class_int>`, value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`is_empty<class_Array_method_is_empty>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`is_read_only<class_Array_method_is_read_only>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`is_same_typed<class_Array_method_is_same_typed>`\ (\ array\: :ref:`Array<class_Array>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`is_typed<class_Array_method_is_typed>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`make_read_only<class_Array_method_make_read_only>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`map<class_Array_method_map>`\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`max<class_Array_method_max>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`min<class_Array_method_min>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`pick_random<class_Array_method_pick_random>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`pop_at<class_Array_method_pop_at>`\ (\ position\: :ref:`int<class_int>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`pop_back<class_Array_method_pop_back>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`pop_front<class_Array_method_pop_front>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`push_back<class_Array_method_push_back>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`push_front<class_Array_method_push_front>`\ (\ value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`reduce<class_Array_method_reduce>`\ (\ method\: :ref:`Callable<class_Callable>`, accum\: :ref:`Variant<class_Variant>` = null\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`remove_at<class_Array_method_remove_at>`\ (\ position\: :ref:`int<class_int>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`resize<class_Array_method_resize>`\ (\ size\: :ref:`int<class_int>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`reverse<class_Array_method_reverse>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`rfind<class_Array_method_rfind>`\ (\ what\: :ref:`Variant<class_Variant>`, from\: :ref:`int<class_int>` = -1\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`rfind_custom<class_Array_method_rfind_custom>`\ (\ method\: :ref:`Callable<class_Callable>`, from\: :ref:`int<class_int>` = -1\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`set<class_Array_method_set>`\ (\ index\: :ref:`int<class_int>`, value\: :ref:`Variant<class_Variant>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`shuffle<class_Array_method_shuffle>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`int<class_int>` | :ref:`size<class_Array_method_size>`\ (\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`slice<class_Array_method_slice>`\ (\ begin\: :ref:`int<class_int>`, end\: :ref:`int<class_int>` = 2147483647, step\: :ref:`int<class_int>` = 1, deep\: :ref:`bool<class_bool>` = false\ ) |const| |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`sort<class_Array_method_sort>`\ (\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| |void| | :ref:`sort_custom<class_Array_method_sort_custom>`\ (\ func\: :ref:`Callable<class_Callable>`\ ) |
|
||
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
|
||
.. rst-class:: classref-reftable-group
|
||
|
||
Операторы
|
||
------------------
|
||
|
||
.. table::
|
||
:widths: auto
|
||
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator !=<class_Array_operator_neq_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`Array<class_Array>` | :ref:`operator +<class_Array_operator_sum_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator \<<class_Array_operator_lt_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator \<=<class_Array_operator_lte_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator ==<class_Array_operator_eq_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator ><class_Array_operator_gt_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`bool<class_bool>` | :ref:`operator >=<class_Array_operator_gte_Array>`\ (\ right\: :ref:`Array<class_Array>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
| :ref:`Variant<class_Variant>` | :ref:`operator []<class_Array_operator_idx_int>`\ (\ index\: :ref:`int<class_int>`\ ) |
|
||
+-------------------------------+----------------------------------------------------------------------------------------------+
|
||
|
||
.. rst-class:: classref-section-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-descriptions-group
|
||
|
||
Описания конструктора
|
||
------------------------------------------
|
||
|
||
.. _class_Array_constructor_Array:
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ ) :ref:`🔗<class_Array_constructor_Array>`
|
||
|
||
Создает пустой **Array**.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ base\: :ref:`Array<class_Array>`, type\: :ref:`int<class_int>`, class_name\: :ref:`StringName<class_StringName>`, script\: :ref:`Variant<class_Variant>`\ )
|
||
|
||
Создает типизированный массив из массива ``base``. Типизированный массив может содержать только элементы заданного типа или те, которые наследуются от заданного класса, как описано в параметрах этого конструктора:
|
||
|
||
- ``type`` — встроенный тип :ref:`Variant<class_Variant>`, как одна из констант :ref:`Variant.Type<enum_@GlobalScope_Variant.Type>`.
|
||
|
||
- ``class_name`` — имя встроенного класса (см. :ref:`Object.get_class()<class_Object_method_get_class>`).
|
||
|
||
- ``script`` — связанный скрипт. Он должен быть экземпляром :ref:`Script<class_Script>` или ``null``.
|
||
|
||
Если ``type`` не является :ref:`@GlobalScope.TYPE_OBJECT<class_@GlobalScope_constant_TYPE_OBJECT>`, ``class_name`` должен быть пустым :ref:`StringName<class_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<class_Array>` **Array**\ (\ from\: :ref:`Array<class_Array>`\ )
|
||
|
||
Возвращает тот же массив, что и ``from``. Если вам нужна копия массива, используйте :ref:`duplicate()<class_Array_method_duplicate>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedByteArray<class_PackedByteArray>`\ )
|
||
|
||
Создает массив из :ref:`PackedByteArray<class_PackedByteArray>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedColorArray<class_PackedColorArray>`\ )
|
||
|
||
Создает массив из :ref:`PackedColorArray<class_PackedColorArray>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ )
|
||
|
||
Создает массив из ``Packed Float32Array``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedFloat64Array<class_PackedFloat64Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedFloat64Array<class_PackedFloat64Array>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedInt32Array<class_PackedInt32Array>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedInt64Array<class_PackedInt64Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedInt64Array<class_PackedInt64Array>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedStringArray<class_PackedStringArray>`\ )
|
||
|
||
Создает массив из :ref:`PackedStringArray<class_PackedStringArray>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedVector2Array<class_PackedVector2Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedVector2Array<class_PackedVector2Array>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedVector3Array<class_PackedVector3Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedVector3Array<class_PackedVector3Array>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-constructor
|
||
|
||
:ref:`Array<class_Array>` **Array**\ (\ from\: :ref:`PackedVector4Array<class_PackedVector4Array>`\ )
|
||
|
||
Создает массив из :ref:`PackedVector4Array<class_PackedVector4Array>`.
|
||
|
||
.. rst-class:: classref-section-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-descriptions-group
|
||
|
||
Описания метода
|
||
------------------------------
|
||
|
||
.. _class_Array_method_all:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **all**\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| :ref:`🔗<class_Array_method_all>`
|
||
|
||
Вызывает заданный :ref:`Callable<class_Callable>` для каждого элемента массива и возвращает ``true``, если :ref:`Callable<class_Callable>` возвращает ``true`` для *всех* элементов массива. Если :ref:`Callable<class_Callable>` возвращает ``false`` для одного элемента массива или более, этот метод возвращает ``false``.
|
||
|
||
Метод ``method`` должен принимать один параметр :ref:`Variant<class_Variant>` (текущий элемент массива) и возвращать :ref:`bool<class_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()<class_Array_method_any>`, :ref:`filter()<class_Array_method_filter>`, :ref:`map()<class_Array_method_map>` и :ref:`reduce()<class_Array_method_reduce>`.
|
||
|
||
\ **Примечание:** В отличие от использования размера массива, возвращаемого :ref:`filter()<class_Array_method_filter>`, этот метод вернет управление как можно раньше, чтобы повысить производительность (особенно с большими массивами).
|
||
|
||
\ **Примечание:** Для пустого массива этот метод `всегда <https://en.wikipedia.org/wiki/Vacuous_truth>`__ возвращает ``true``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_any:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **any**\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| :ref:`🔗<class_Array_method_any>`
|
||
|
||
Вызывает заданный :ref:`Callable<class_Callable>` для каждого элемента в массиве и возвращает ``true``, если :ref:`Callable<class_Callable>` возвращает ``true`` для *одного или более* элементов в массиве. Если :ref:`Callable<class_Callable>` возвращает ``false`` для всех элементов в массиве, этот метод возвращает ``false``.
|
||
|
||
Метод ``method`` должен принимать один параметр :ref:`Variant<class_Variant>` (текущий элемент массива) и возвращать :ref:`bool<class_bool>`.
|
||
|
||
::
|
||
|
||
func greater_than_5(number):
|
||
return number > 5
|
||
|
||
func _ready():
|
||
print([6, 10, 6].any(greater_than_5)) # Выводит true (3 элементы оцениваются как true).
|
||
print([4, 10, 4].any(greater_than_5)) # Выводит true (1 элементы оцениваются как true).
|
||
print([4, 4, 4].any(greater_than_5)) # Выводит false (0 элементы оцениваются как true).
|
||
print([].any(greater_than_5)) # Выводит false (0 элементы оцениваются как true).
|
||
|
||
# То же, что и в первой строке выше, но с использованием лямбда-функции.
|
||
print([6, 10, 6].any(func(number): return number > 5)) # Выводит true
|
||
|
||
См. также :ref:`all()<class_Array_method_all>`, :ref:`filter()<class_Array_method_filter>`, :ref:`map()<class_Array_method_map>` и :ref:`reduce()<class_Array_method_reduce>`.
|
||
|
||
\ **Примечание:** В отличие от использования размера массива, возвращаемого :ref:`filter()<class_Array_method_filter>`, этот метод вернет управление как можно раньше, чтобы повысить производительность (особенно с большими массивами).
|
||
|
||
\ **Примечание:** Для пустого массива этот метод всегда возвращает ``false``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_append:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **append**\ (\ value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_append>`
|
||
|
||
Добавляет ``value`` в конец массива (аналог :ref:`push_back()<class_Array_method_push_back>`).
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_append_array:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **append_array**\ (\ array\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_method_append_array>`
|
||
|
||
Добавляет еще один ``array`` в конец этого массива.
|
||
|
||
::
|
||
|
||
var numbers = [1, 2, 3]
|
||
var extra = [4, 5, 6]
|
||
numbers.append_array(extra)
|
||
print(numbers) # Prints [1, 2, 3, 4, 5, 6]
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_assign:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **assign**\ (\ array\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_method_assign>`
|
||
|
||
Назначает элементы другого ``array`` в массив. Изменяет размер массива для соответствия ``array``. Выполняет преобразования типов, если массив типизирован.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_back:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **back**\ (\ ) |const| :ref:`🔗<class_Array_method_back>`
|
||
|
||
Возвращает последний элемент массива. Если массив пуст, происходит сбой и возвращается ``null``. См. также :ref:`front()<class_Array_method_front>`.
|
||
|
||
\ **Примечание:** В отличие от оператора ``[]`` (``array[-1]``), ошибка генерируется без остановки выполнения проекта.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_bsearch:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **bsearch**\ (\ value\: :ref:`Variant<class_Variant>`, before\: :ref:`bool<class_bool>` = true\ ) |const| :ref:`🔗<class_Array_method_bsearch>`
|
||
|
||
Возвращает индекс ``value`` в отсортированном массиве. Если его не удается найти, возвращает место, где следует вставить ``value``, чтобы сохранить массив отсортированным. Используемый алгоритм — `бинарный поиск <https://en.wikipedia.org/wiki/Binary_search_algorithm>`__.
|
||
|
||
Если ``before`` равен ``true`` (как по умолчанию), возвращаемый индекс предшествует всем существующим элементам, равным ``value`` в массиве.
|
||
|
||
::
|
||
|
||
var numbers = [2, 4, 8, 10]
|
||
var idx = numbers.bsearch(7)
|
||
|
||
numbers.insert(idx, 7)
|
||
print(numbers) # Prints [2, 4, 7, 8, 10]
|
||
|
||
var fruits = ["Apple", "Lemon", "Lemon", "Orange"]
|
||
print(fruits.bsearch("Lemon", true)) # Печатает 1, указывает на первый "Lemon".
|
||
print(fruits.bsearch("Lemon", false)) # Печатает 3, указывают на "Lemon".
|
||
|
||
\ **Примечание:** Вызов :ref:`bsearch()<class_Array_method_bsearch>` для *unsorted (несортированного)* массива приведет к неожиданному поведению. Используйте :ref:`sort()<class_Array_method_sort>` перед вызовом этого метода.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_bsearch_custom:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **bsearch_custom**\ (\ value\: :ref:`Variant<class_Variant>`, func\: :ref:`Callable<class_Callable>`, before\: :ref:`bool<class_bool>` = true\ ) |const| :ref:`🔗<class_Array_method_bsearch_custom>`
|
||
|
||
Возвращает индекс ``value`` в отсортированном массиве. Если его не удается найти, возвращает, куда следует вставить ``value``, чтобы сохранить массив отсортированным (используя ``func`` для сравнений). Используемый алгоритм — `бинарный поиск <https://en.wikipedia.org/wiki/Binary_search_algorithm>`__.
|
||
|
||
Подобно :ref:`sort_custom()<class_Array_method_sort_custom>`, ``func`` вызывается столько раз, сколько необходимо, получая один элемент массива и ``value`` в качестве аргументов. Функция должна возвращать ``true``, если элемент массива должен быть *behind (позади)* ``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 = [["Tomato", 2], ["Kiwi", 5], ["Rice", 9]]
|
||
|
||
var apple = ["Apple", 5]
|
||
# "Apple" вставляется перед "Kiwi".
|
||
my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple)
|
||
|
||
var banana = ["Banana", 5]
|
||
# "Banana" вставляется после "Kiwi".
|
||
my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana)
|
||
|
||
# Выводит [["Tomato", 2], ["Apple", 5], ["Kiwi", 5], ["Banana", 5], ["Rice", 9]]
|
||
print(my_items)
|
||
|
||
\ **Примечание:** Вызов :ref:`bsearch_custom()<class_Array_method_bsearch_custom>` для *несортированного* массива приведет к неожиданному поведению. Используйте :ref:`sort_custom()<class_Array_method_sort_custom>` с ``func`` перед вызовом этого метода.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_clear:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **clear**\ (\ ) :ref:`🔗<class_Array_method_clear>`
|
||
|
||
Удаляет все элементы из массива. Это эквивалентно использованию :ref:`resize()<class_Array_method_resize>` с размером ``0``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_count:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **count**\ (\ value\: :ref:`Variant<class_Variant>`\ ) |const| :ref:`🔗<class_Array_method_count>`
|
||
|
||
Возвращает количество раз, когда элемент встречается в массиве.
|
||
|
||
Чтобы подсчитать, сколько элементов в массиве удовлетворяют условию, см. :ref:`reduce()<class_Array_method_reduce>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_duplicate:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Array<class_Array>` **duplicate**\ (\ deep\: :ref:`bool<class_bool>` = false\ ) |const| :ref:`🔗<class_Array_method_duplicate>`
|
||
|
||
Возвращает новую копию массива.
|
||
|
||
По умолчанию возвращается **неглубокая** копия: все вложенные элементы **Array**, :ref:`Dictionary<class_Dictionary>` и :ref:`Resource<class_Resource>` используются совместно с исходным массивом. Изменение любого из них в одном массиве также повлияет на них в другом.
|
||
|
||
Если ``deep`` равен ``true``, возвращается **глубокая** копия: все вложенные массивы и словари также дублируются (рекурсивно). Однако любой :ref:`Resource<class_Resource>` по-прежнему используется совместно с исходным массивом.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_duplicate_deep:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Array<class_Array>` **duplicate_deep**\ (\ deep_subresources_mode\: :ref:`int<class_int>` = 1\ ) |const| :ref:`🔗<class_Array_method_duplicate_deep>`
|
||
|
||
Duplicates this array, deeply, like :ref:`duplicate()<class_Array_method_duplicate>` when passing ``true``, with extra control over how subresources are handled.
|
||
|
||
\ ``deep_subresources_mode`` must be one of the values from :ref:`DeepDuplicateMode<enum_Resource_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<class_Variant>`\ ) :ref:`🔗<class_Array_method_erase>`
|
||
|
||
Находит и удаляет первое вхождение ``value`` из массива. Если ``value`` отсутствует в массиве, ничего не происходит. Чтобы удалить элемент по индексу, используйте :ref:`remove_at()<class_Array_method_remove_at>`.
|
||
|
||
\ **Примечание:** Этот метод сдвигает индекс каждого элемента после удаленного ``value`` назад, что может иметь заметные издержки производительности, особенно для больших массивов.
|
||
|
||
\ **Примечание:** Удаление элементов при итерации по массивам **не** поддерживается и приведет к непредсказуемому поведению.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_fill:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **fill**\ (\ value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_fill>`
|
||
|
||
Назначает заданное ``value`` всем элементам массива.
|
||
|
||
Этот метод часто можно комбинировать с :ref:`resize()<class_Array_method_resize>` для создания массива с заданным размером и инициализированными элементами:
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
var array = []
|
||
array.resize(5)
|
||
array.fill(2)
|
||
print(array) # Prints [2, 2, 2, 2, 2]
|
||
|
||
.. code-tab:: csharp
|
||
|
||
Godot.Collections.Array array = [];
|
||
array.Resize(5);
|
||
array.Fill(2);
|
||
GD.Print(array); // Prints [2, 2, 2, 2, 2]
|
||
|
||
|
||
|
||
\ **Примечание:** Если ``value`` является :ref:`Variant<class_Variant>`, переданным по ссылке (производным от :ref:`Object<class_Object>`, **Array**, :ref:`Dictionary<class_Dictionary>` и т. д.), массив будет заполнен ссылками на одно и то же ``value``, которые не являются дубликатами.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_filter:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Array<class_Array>` **filter**\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| :ref:`🔗<class_Array_method_filter>`
|
||
|
||
Вызывает заданный :ref:`Callable<class_Callable>` для каждого элемента в массиве и возвращает новый, отфильтрованный **Array**.
|
||
|
||
Метод ``method`` получает один из элементов массива в качестве аргумента и должен возвращать ``true`` для добавления элемента в отфильтрованный массив или ``false`` для его исключения.
|
||
|
||
::
|
||
|
||
func is_even(number):
|
||
return number % 2 == 0
|
||
|
||
func _ready():
|
||
print([1, 4, 5, 8].filter(is_even)) # Выводит [4, 8]
|
||
|
||
# То же, что и выше, но с использованием лямбда-функции.
|
||
print([1, 4, 5, 8].filter(func(number): return number % 2 == 0))
|
||
|
||
См. также :ref:`any()<class_Array_method_any>`, :ref:`all()<class_Array_method_all>`, :ref:`map()<class_Array_method_map>` и :ref:`reduce()<class_Array_method_reduce>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_find:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **find**\ (\ what\: :ref:`Variant<class_Variant>`, from\: :ref:`int<class_int>` = 0\ ) |const| :ref:`🔗<class_Array_method_find>`
|
||
|
||
Возвращает индекс **first (первого)** вхождения ``what`` в этом массиве или ``-1``, если их нет. Начало поиска можно указать с помощью ``from``, продолжая до конца массива.
|
||
|
||
\ **Примечание:** Если вы просто хотите узнать, содержит ли массив ``what``, используйте :ref:`has()<class_Array_method_has>` (``Contains`` в C#). В GDScript вы также можете использовать оператор ``in``.
|
||
|
||
\ **Примечание:** Из соображений производительности на поиск влияет :ref:`Variant.Type<enum_@GlobalScope_Variant.Type>` ``what``. Например, ``7`` (:ref:`int<class_int>`) и ``7.0`` (:ref:`float<class_float>`) не считаются равными для этого метода.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_find_custom:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **find_custom**\ (\ method\: :ref:`Callable<class_Callable>`, from\: :ref:`int<class_int>` = 0\ ) |const| :ref:`🔗<class_Array_method_find_custom>`
|
||
|
||
Возвращает индекс **первого** элемента в массиве, который заставляет ``method`` вернуть ``true`` или ``-1``, если их нет. Начало поиска можно указать с помощью ``from``, продолжая до конца массива.
|
||
|
||
\ ``method`` — это вызываемый объект, который принимает элемент массива и возвращает :ref:`bool<class_bool>`.
|
||
|
||
\ **Примечание:** Если вы просто хотите узнать, содержит ли массив *что-либо*, удовлетворяющее ``method``, используйте :ref:`any()<class_Array_method_any>`.
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
func is_even(number):
|
||
return number % 2 == 0
|
||
|
||
func _ready():
|
||
print([1, 3, 4, 7].find_custom(is_even.bind())) # Prints 2
|
||
|
||
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_front:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **front**\ (\ ) |const| :ref:`🔗<class_Array_method_front>`
|
||
|
||
Возвращает первый элемент массива. Если массив пуст, происходит сбой и возвращается ``null``. См. также :ref:`back()<class_Array_method_back>`.
|
||
|
||
\ **Примечание:** В отличие от оператора ``[]`` (``array[0]``), ошибка генерируется без остановки выполнения проекта.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_get:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **get**\ (\ index\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_Array_method_get>`
|
||
|
||
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<class_int>` **get_typed_builtin**\ (\ ) |const| :ref:`🔗<class_Array_method_get_typed_builtin>`
|
||
|
||
Возвращает встроенный тип :ref:`Variant<class_Variant>` типизированного массива как константу :ref:`Variant.Type<enum_@GlobalScope_Variant.Type>`. Если массив не типизирован, возвращает :ref:`@GlobalScope.TYPE_NIL<class_@GlobalScope_constant_TYPE_NIL>`. См. также :ref:`is_typed()<class_Array_method_is_typed>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_get_typed_class_name:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`StringName<class_StringName>` **get_typed_class_name**\ (\ ) |const| :ref:`🔗<class_Array_method_get_typed_class_name>`
|
||
|
||
Возвращает **встроенное** имя класса типизированного массива, если встроенный :ref:`Variant<class_Variant>` тип :ref:`@GlobalScope.TYPE_OBJECT<class_@GlobalScope_constant_TYPE_OBJECT>`. В противном случае возвращает пустой :ref:`StringName<class_StringName>`. См. также :ref:`is_typed()<class_Array_method_is_typed>` и :ref:`Object.get_class()<class_Object_method_get_class>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_get_typed_script:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **get_typed_script**\ (\ ) |const| :ref:`🔗<class_Array_method_get_typed_script>`
|
||
|
||
Возвращает экземпляр :ref:`Script<class_Script>`, связанный с этим типизированным массивом, или ``null``, если он не существует. См. также :ref:`is_typed()<class_Array_method_is_typed>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_has:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **has**\ (\ value\: :ref:`Variant<class_Variant>`\ ) |const| :ref:`🔗<class_Array_method_has>`
|
||
|
||
Возвращает ``true``, если массив содержит указанное ``value``.
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
print(["inside", 7].has("inside")) # Выводит true
|
||
print(["inside", 7].has("outside")) # Выводит false
|
||
print(["inside", 7].has(7)) # Выводит true
|
||
print(["inside", 7].has("7")) # Выводит false
|
||
|
||
.. code-tab:: csharp
|
||
|
||
Godot.Collections.Array arr = ["inside", 7];
|
||
// По соглашению C# этот метод переименован в `Contains`.
|
||
GD.Print(arr.Contains("inside")); // Выводит True
|
||
GD.Print(arr.Contains("outside")); // Выводит False
|
||
GD.Print(arr.Contains(7)); // Выводит True
|
||
GD.Print(arr.Contains("7")); // Выводит False
|
||
|
||
|
||
|
||
В GDScript это эквивалентно оператору ``in``:
|
||
|
||
::
|
||
|
||
if 4 in [2, 4, 6, 8]:
|
||
print("4 уже здесь!") # Будет напечатано.
|
||
|
||
\ **Примечание:** Из соображений производительности на поиск влияет ``value`` :ref:`Variant.Type<enum_@GlobalScope_Variant.Type>`. Например, ``7`` (:ref:`int<class_int>`) и ``7.0`` (:ref:`float<class_float>`) не считаются равными для этого метода.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_hash:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **hash**\ (\ ) |const| :ref:`🔗<class_Array_method_hash>`
|
||
|
||
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<class_int>` **insert**\ (\ position\: :ref:`int<class_int>`, value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_insert>`
|
||
|
||
Вставляет новый элемент (``value``) по указанному индексу (``position``) в массиве. ``position`` должен быть между ``0`` и :ref:`size()<class_Array_method_size>` массива. Если отрицательно, ``position`` считается относительно конца массива.
|
||
|
||
Возвращает :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>` в случае успеха или одну из других констант :ref:`Error<enum_@GlobalScope_Error>`, если этот метод не выполняется.
|
||
|
||
\ **Примечание:** Индекс каждого элемента после ``position`` необходимо сместить вперед, что может иметь заметные потери производительности, особенно в больших массивах.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_is_empty:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **is_empty**\ (\ ) |const| :ref:`🔗<class_Array_method_is_empty>`
|
||
|
||
Возвращает ``true``, если массив пуст (``[]``). См. также :ref:`size()<class_Array_method_size>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_is_read_only:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **is_read_only**\ (\ ) |const| :ref:`🔗<class_Array_method_is_read_only>`
|
||
|
||
Возвращает ``true``, если массив доступен только для чтения. См. :ref:`make_read_only()<class_Array_method_make_read_only>`.
|
||
|
||
В GDScript массивы автоматически доступны только для чтения, если объявлены с ключевым словом ``const``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_is_same_typed:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **is_same_typed**\ (\ array\: :ref:`Array<class_Array>`\ ) |const| :ref:`🔗<class_Array_method_is_same_typed>`
|
||
|
||
Возвращает ``true``, если этот массив типизирован так же, как заданный ``array``. См. также :ref:`is_typed()<class_Array_method_is_typed>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_is_typed:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`bool<class_bool>` **is_typed**\ (\ ) |const| :ref:`🔗<class_Array_method_is_typed>`
|
||
|
||
Возвращает ``true``, если массив типизирован. Типизированные массивы могут содержать только элементы определенного типа, как определено конструктором типизированного массива. Методы типизированного массива по-прежнему должны возвращать обобщенный :ref:`Variant<class_Variant>`.
|
||
|
||
В GDScript можно определить типизированный массив со статической типизацией:
|
||
|
||
::
|
||
|
||
var numbers: Array[float] = [0.2, 4.2, -2.0]
|
||
print(numbers.is_typed()) # Prints true
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_make_read_only:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **make_read_only**\ (\ ) :ref:`🔗<class_Array_method_make_read_only>`
|
||
|
||
Делает массив доступным только для чтения. Элементы массива не могут быть переопределены другими значениями, и их порядок не может быть изменен. Не применяется к вложенным элементам, таким как словари.
|
||
|
||
В GDScript массивы автоматически доступны только для чтения, если объявлены с ключевым словом ``const``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_map:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Array<class_Array>` **map**\ (\ method\: :ref:`Callable<class_Callable>`\ ) |const| :ref:`🔗<class_Array_method_map>`
|
||
|
||
Вызывает заданный :ref:`Callable<class_Callable>` для каждого элемента в массиве и возвращает новый массив, заполненный значениями, возвращаемыми ``method``.
|
||
|
||
\ ``method`` должен принимать один параметр :ref:`Variant<class_Variant>` (текущий элемент массива) и может возвращать любой :ref:`Variant<class_Variant>`.
|
||
|
||
::
|
||
|
||
func double(number):
|
||
return number * 2
|
||
|
||
func _ready():
|
||
print([1, 2, 3].map(double)) # Prints [2, 4, 6]
|
||
|
||
# То же, что и выше, но с использованием лямбда-функции.
|
||
print([1, 2, 3].map(func(element): return element * 2))
|
||
|
||
См. также :ref:`filter()<class_Array_method_filter>`, :ref:`reduce()<class_Array_method_reduce>`, :ref:`any()<class_Array_method_any>` и :ref:`all()<class_Array_method_all>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_max:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **max**\ (\ ) |const| :ref:`🔗<class_Array_method_max>`
|
||
|
||
Возвращает максимальное значение, содержащееся в массиве, если все элементы можно сравнить. В противном случае возвращает ``null``. См. также :ref:`min()<class_Array_method_min>`.
|
||
|
||
Чтобы найти максимальное значение с помощью пользовательского компаратора, можно использовать :ref:`reduce()<class_Array_method_reduce>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_min:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **min**\ (\ ) |const| :ref:`🔗<class_Array_method_min>`
|
||
|
||
Возвращает минимальное значение, содержащееся в массиве, если все элементы можно сравнить. В противном случае возвращает ``null``. См. также :ref:`max()<class_Array_method_max>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_pick_random:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **pick_random**\ (\ ) |const| :ref:`🔗<class_Array_method_pick_random>`
|
||
|
||
Возвращает случайный элемент из массива. Генерирует ошибку и возвращает ``null``, если массив пуст.
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
# Может печатать 1, 2, 3.25 или "Привет".
|
||
print([1, 2, 3.25, "Привет"].pick_random())
|
||
|
||
.. code-tab:: csharp
|
||
|
||
Godot.Collections.Array array = [1, 2, 3.25f, "Привет"];
|
||
GD.Print(array.PickRandom()); // Может печатать 1, 2, 3.25 или "Привет".
|
||
|
||
|
||
|
||
\ **Примечание:** Как и многие подобные функции в движке (например, :ref:`@GlobalScope.randi()<class_@GlobalScope_method_randi>` или :ref:`shuffle()<class_Array_method_shuffle>`), этот метод использует общее глобальное случайное начальное число. Чтобы получить предсказуемый результат от этого метода, см. :ref:`@GlobalScope.seed()<class_@GlobalScope_method_seed>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_pop_at:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **pop_at**\ (\ position\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Array_method_pop_at>`
|
||
|
||
Удаляет и возвращает элемент массива с индексом ``position``. Если отрицательно, ``position`` считается относительно конца массива. Возвращает ``null``, если массив пуст. Если ``position`` выходит за пределы, также генерируется сообщение об ошибке.
|
||
|
||
\ **Примечание:** Этот метод сдвигает индекс каждого элемента после ``position`` назад, что может иметь заметные потери производительности, особенно в больших массивах.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_pop_back:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **pop_back**\ (\ ) :ref:`🔗<class_Array_method_pop_back>`
|
||
|
||
Удаляет и возвращает последний элемент массива. Возвращает ``null``, если массив пуст, без генерации ошибки. См. также :ref:`pop_front()<class_Array_method_pop_front>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_pop_front:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **pop_front**\ (\ ) :ref:`🔗<class_Array_method_pop_front>`
|
||
|
||
Удаляет и возвращает первый элемент массива. Возвращает ``null``, если массив пуст, без генерации ошибки. См. также :ref:`pop_back()<class_Array_method_pop_back>`.
|
||
|
||
\ **Примечание:** Этот метод сдвигает индекс каждого другого элемента назад, что может иметь заметные издержки производительности, особенно в больших массивах.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_push_back:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **push_back**\ (\ value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_push_back>`
|
||
|
||
Добавляет элемент в конец массива. См. также :ref:`push_front()<class_Array_method_push_front>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_push_front:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **push_front**\ (\ value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_push_front>`
|
||
|
||
Добавляет элемент в начало массива. См. также :ref:`push_back()<class_Array_method_push_back>`.
|
||
|
||
\ **Примечание:** Этот метод сдвигает индекс каждого другого элемента вперед, что может иметь заметные издержки производительности, особенно в больших массивах.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_reduce:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Variant<class_Variant>` **reduce**\ (\ method\: :ref:`Callable<class_Callable>`, accum\: :ref:`Variant<class_Variant>` = null\ ) |const| :ref:`🔗<class_Array_method_reduce>`
|
||
|
||
Вызывает заданный :ref:`Callable<class_Callable>` для каждого элемента в массиве, накапливает результат в ``accum``, затем возвращает его.
|
||
|
||
Метод ``method`` принимает два аргумента: текущее значение ``accum`` и текущий элемент массива. Если ``accum`` равен ``null`` (как по умолчанию), итерация начнется со второго элемента, а первый будет использоваться как начальное значение ``accum``.
|
||
|
||
::
|
||
|
||
func sum(accum, number):
|
||
return accum + 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()<class_Array_method_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()<class_Array_method_count>`:
|
||
|
||
::
|
||
|
||
func is_even(number):
|
||
return number % 2 == 0
|
||
|
||
func _ready():
|
||
var arr = [1, 2, 3, 4, 5]
|
||
# Если текущий элемент четный, увеличиваем count, в противном случае оставляем count прежним.
|
||
var even_count = arr.reduce(func(count, next): return count + 1 if is_even(next) else count, 0)
|
||
print(even_count) # Выводит 2
|
||
|
||
См. также :ref:`map()<class_Array_method_map>`, :ref:`filter()<class_Array_method_filter>`, :ref:`any()<class_Array_method_any>` и :ref:`all()<class_Array_method_all>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_remove_at:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **remove_at**\ (\ position\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Array_method_remove_at>`
|
||
|
||
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()<class_Array_method_pop_at>`. To remove an element by value, use :ref:`erase()<class_Array_method_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<class_int>` **resize**\ (\ size\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Array_method_resize>`
|
||
|
||
Устанавливает количество элементов массива равным ``size``. Если ``size`` меньше текущего размера массива, элементы в конце удаляются. Если ``size`` больше, добавляются новые элементы по умолчанию (обычно ``null``) в зависимости от типа массива.
|
||
|
||
Возвращает :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>` в случае успеха или одну из следующих констант :ref:`Error<enum_@GlobalScope_Error>`, если этот метод не срабатывает: :ref:`@GlobalScope.ERR_LOCKED<class_@GlobalScope_constant_ERR_LOCKED>`, если массив доступен только для чтения, :ref:`@GlobalScope.ERR_INVALID_PARAMETER<class_@GlobalScope_constant_ERR_INVALID_PARAMETER>`, если размер отрицательный, или :ref:`@GlobalScope.ERR_OUT_OF_MEMORY<class_@GlobalScope_constant_ERR_OUT_OF_MEMORY>`, если выделение памяти не удается. Используйте :ref:`size()<class_Array_method_size>`, чтобы узнать фактический размер массива после изменения размера.
|
||
|
||
\ **Примечание:** Вызов этого метода один раз и назначение новых значений выполняется быстрее, чем вызов :ref:`append()<class_Array_method_append>` для каждого нового элемента.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_reverse:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **reverse**\ (\ ) :ref:`🔗<class_Array_method_reverse>`
|
||
|
||
Меняет порядок всех элементов в массиве на обратный.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_rfind:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **rfind**\ (\ what\: :ref:`Variant<class_Variant>`, from\: :ref:`int<class_int>` = -1\ ) |const| :ref:`🔗<class_Array_method_rfind>`
|
||
|
||
Возвращает индекс **последнего** вхождения ``what`` в этом массиве или ``-1``, если их нет. Начало поиска можно указать с помощью ``from``, продолжая до начала массива. Этот метод является обратным :ref:`find()<class_Array_method_find>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_rfind_custom:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **rfind_custom**\ (\ method\: :ref:`Callable<class_Callable>`, from\: :ref:`int<class_int>` = -1\ ) |const| :ref:`🔗<class_Array_method_rfind_custom>`
|
||
|
||
Возвращает индекс **последнего** элемента массива, который заставляет ``method`` возвращать ``true`` или ``-1``, если их нет. Начало поиска можно указать с помощью ``from``, продолжая до начала массива. Этот метод является обратным :ref:`find_custom()<class_Array_method_find_custom>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_set:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **set**\ (\ index\: :ref:`int<class_int>`, value\: :ref:`Variant<class_Variant>`\ ) :ref:`🔗<class_Array_method_set>`
|
||
|
||
Устанавливает значение элемента с указанным ``index`` на указанное ``value``. Это не изменит размер массива, а только изменит значение с индексом, уже имеющимся в массиве. Это то же самое, что использовать оператор ``[]`` (``array[index] = value``).
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_shuffle:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **shuffle**\ (\ ) :ref:`🔗<class_Array_method_shuffle>`
|
||
|
||
Перемешивает все элементы массива в случайном порядке.
|
||
|
||
\ **Примечание:** Как и многие подобные функции в движке (например, :ref:`@GlobalScope.randi()<class_@GlobalScope_method_randi>` или :ref:`pick_random()<class_Array_method_pick_random>`), этот метод использует общее глобальное случайное начальное число. Чтобы получить предсказуемый результат от этого метода, см. :ref:`@GlobalScope.seed()<class_@GlobalScope_method_seed>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_size:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`int<class_int>` **size**\ (\ ) |const| :ref:`🔗<class_Array_method_size>`
|
||
|
||
Возвращает количество элементов в массиве. Пустые массивы (``[]``) всегда возвращают ``0``. См. также :ref:`is_empty()<class_Array_method_is_empty>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_slice:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
:ref:`Array<class_Array>` **slice**\ (\ begin\: :ref:`int<class_int>`, end\: :ref:`int<class_int>` = 2147483647, step\: :ref:`int<class_int>` = 1, deep\: :ref:`bool<class_bool>` = false\ ) |const| :ref:`🔗<class_Array_method_slice>`
|
||
|
||
Возвращает новый **Array**, содержащий элементы этого массива, от индекса ``begin`` (включительно) до ``end`` (исключительно), каждые ``step`` элементов.
|
||
|
||
Если ``begin`` или ``end`` отрицательны, их значение относительно конца массива.
|
||
|
||
Если ``step`` отрицателен, этот метод выполняет итерацию по массиву в обратном порядке, возвращая срез, упорядоченный в обратном порядке. Чтобы это работало, ``begin`` должен быть больше ``end``.
|
||
|
||
Если ``deep`` равен ``true``, все вложенные элементы **Array** и :ref:`Dictionary<class_Dictionary>` в срезе дублируются из оригинала, рекурсивно. См. также :ref:`duplicate()<class_Array_method_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:`🔗<class_Array_method_sort>`
|
||
|
||
Сортирует массив в порядке возрастания. Окончательный порядок зависит от сравнения "меньше" (``<``) между элементами.
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
var numbers = [10, 5, 2.5, 8]
|
||
numbers.sort()
|
||
print(numbers) # Prints [2.5, 5, 8, 10]
|
||
|
||
.. code-tab:: csharp
|
||
|
||
Godot.Collections.Array numbers = [10, 5, 2.5, 8];
|
||
numbers.Sort();
|
||
GD.Print(numbers); // Prints [2.5, 5, 8, 10]
|
||
|
||
|
||
|
||
\ **Примечание:** Используемый алгоритм сортировки не является `стабильным <https://en.wikipedia.org/wiki/Sorting_algorithm#Stability>`__. Это означает, что эквивалентные элементы (такие как ``2`` и ``2.0``) могут иметь измененный порядок при вызове :ref:`sort()<class_Array_method_sort>`.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_method_sort_custom:
|
||
|
||
.. rst-class:: classref-method
|
||
|
||
|void| **sort_custom**\ (\ func\: :ref:`Callable<class_Callable>`\ ) :ref:`🔗<class_Array_method_sort_custom>`
|
||
|
||
Сортирует массив с использованием пользовательского :ref:`Callable<class_Callable>`.
|
||
|
||
\ ``func`` вызывается столько раз, сколько необходимо, получая два элемента массива в качестве аргументов. Функция должна возвращать ``true``, если первый элемент должен быть перемещен *перед* вторым, в противном случае она должна возвращать ``false``.
|
||
|
||
::
|
||
|
||
func sort_ascending(a, b):
|
||
if a[1] < b[1]:
|
||
return true
|
||
return false
|
||
|
||
func _ready():
|
||
var my_items = [["Tomato", 5], ["Apple", 9], ["Rice", 4]]
|
||
my_items.sort_custom(sort_ascending)
|
||
print(my_items) # Prints [["Rice", 4], ["Tomato", 5], ["Apple", 9]]
|
||
|
||
#Сортировка по убыванию с использованием лямбда-функции.
|
||
my_items.sort_custom(func(a, b): return a[1] > b[1])
|
||
print(my_items) # Prints [["Apple", 9], ["Tomato", 5], ["Rice", 4]]
|
||
|
||
Также может потребоваться использовать этот метод для сортировки строк в естественном порядке с помощью :ref:`String.naturalnocasecmp_to()<class_String_method_naturalnocasecmp_to>`, как в следующем примере:
|
||
|
||
::
|
||
|
||
var files = ["newfile1", "newfile2", "newfile10", "newfile11"]
|
||
files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)
|
||
print(files) # Prints ["newfile1", "newfile2", "newfile10", "newfile11"]
|
||
|
||
\ **Примечание:** В C# этот метод не поддерживается.
|
||
|
||
\ **Примечание:** Используемый алгоритм сортировки не является `стабильным <https://en.wikipedia.org/wiki/Sorting_algorithm#Stability>`__. Это означает, что значения, считающиеся равными, могут иметь измененный порядок при вызове этого метода.
|
||
|
||
\ **Примечание:** Не следует рандомизировать возвращаемое значение ``func``, так как алгоритм пирамидальной сортировки ожидает согласованного результата. Рандомизация возвращаемого значения приведет к неожиданному поведению.
|
||
|
||
.. rst-class:: classref-section-separator
|
||
|
||
----
|
||
|
||
.. rst-class:: classref-descriptions-group
|
||
|
||
Описания оператора
|
||
------------------------------------
|
||
|
||
.. _class_Array_operator_neq_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator !=**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_neq_Array>`
|
||
|
||
Возвращает ``true``, если размер массива или его элементов отличается от ``right``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_sum_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`Array<class_Array>` **operator +**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_sum_Array>`
|
||
|
||
Добавляет массив ``right`` к левому операнду, создавая новый **Array**. Это также известно как конкатенация массивов.
|
||
|
||
|
||
.. tabs::
|
||
|
||
.. code-tab:: gdscript
|
||
|
||
var array1 = ["One", 2]
|
||
var array2 = [3, "Four"]
|
||
print(array1 + array2) # Prints ["One", 2, 3, "Four"]
|
||
|
||
.. code-tab:: csharp
|
||
|
||
// Обратите внимание, что конкатенация невозможна с собственным типом массива C#.
|
||
Godot.Collections.Array array1 = ["One", 2];
|
||
Godot.Collections.Array array2 = [3, "Four"];
|
||
GD.Print(array1 + array2); // Prints ["One", 2, 3, "Four"]
|
||
|
||
|
||
|
||
\ **Примечание:** Для существующих массивов :ref:`append_array()<class_Array_method_append_array>` гораздо эффективнее, чем конкатенация и присваивание с помощью оператора ``+=``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_lt_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator <**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_lt_Array>`
|
||
|
||
Сравнивает элементы обоих массивов по порядку, начиная с индекса ``0`` и заканчивая последним общим индексом для обоих массивов. Для каждой пары элементов возвращает ``true``, если элемент этого массива меньше, чем ``right``, ``false``, если этот элемент больше. В противном случае переходит к следующей паре.
|
||
|
||
Если все искомые элементы равны, возвращает ``true``, если размер этого массива меньше, чем ``right``, в противном случае возвращает ``false``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_lte_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator <=**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_lte_Array>`
|
||
|
||
Сравнивает элементы обоих массивов по порядку, начиная с индекса ``0`` и заканчивая последним общим индексом для обоих массивов. Для каждой пары элементов возвращает ``true``, если элемент этого массива меньше, чем ``right``, ``false``, если этот элемент больше. В противном случае переходит к следующей паре.
|
||
|
||
Если все искомые элементы равны, возвращает ``true``, если размер этого массива меньше или равен ``right``, в противном случае возвращает ``false``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_eq_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator ==**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_eq_Array>`
|
||
|
||
Сравнивает левый операнд **Array** с ``right`` **Array**. Возвращает ``true``, если размеры и содержимое массивов равны, в противном случае ``false`` .
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_gt_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator >**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_gt_Array>`
|
||
|
||
Сравнивает элементы обоих массивов по порядку, начиная с индекса ``0`` и заканчивая последним общим индексом для обоих массивов. Для каждой пары элементов возвращает ``true``, если элемент этого массива больше, чем ``right``, ``false``, если этот элемент меньше. В противном случае переходит к следующей паре.
|
||
|
||
Если все искомые элементы равны, возвращает ``true``, если размер этого массива больше, чем ``right``, в противном случае возвращает ``false``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_gte_Array:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`bool<class_bool>` **operator >=**\ (\ right\: :ref:`Array<class_Array>`\ ) :ref:`🔗<class_Array_operator_gte_Array>`
|
||
|
||
Сравнивает элементы обоих массивов по порядку, начиная с индекса ``0`` и заканчивая последним общим индексом для обоих массивов. Для каждой пары элементов возвращает ``true``, если элемент этого массива больше, чем ``right``, ``false``, если этот элемент меньше. В противном случае переходит к следующей паре.
|
||
|
||
Если все искомые элементы равны, возвращает ``true``, если размер этого массива больше или равен ``right``, в противном случае возвращает ``false``.
|
||
|
||
.. rst-class:: classref-item-separator
|
||
|
||
----
|
||
|
||
.. _class_Array_operator_idx_int:
|
||
|
||
.. rst-class:: classref-operator
|
||
|
||
:ref:`Variant<class_Variant>` **operator []**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Array_operator_idx_int>`
|
||
|
||
Возвращает элемент :ref:`Variant<class_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 (Нет возвращаемого значения.)`
|