Files
godot-docs-l10n/classes/zh_CN/class_array.rst
Rémi Verschelde 9581bc9bb3 Sync class reference translations with upstream 4.x
Still only zh_CN for now.
zh_TW is near 100% complete, but it has hundreds of validation errors
which need to be fixed first.
2023-11-21 16:13:45 +01:00

1312 lines
68 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. DO NOT EDIT THIS FILE!!!
.. Generated automatically from Godot engine sources.
.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/Array.xml.
.. _class_Array:
Array
=====
一种内置数据结构,包含一系列元素。
.. rst-class:: classref-introduction-group
描述
----
通用数组,可以包含任意类型的多个元素,可以通过从 0 开始的数字索引进行访问。负数索引可以用来从后面数起,就像在 Python 中一样(-1 是最后一个元素、-2 是倒数第二,以此类推)。
\ **示例:**\
.. tabs::
.. code-tab:: gdscript
var array = ["One", 2, 3, "Four"]
print(array[0]) # One。
print(array[2]) # 3。
print(array[-1]) # Four。
array[2] = "Three"
print(array[-2]) # Three。
.. code-tab:: csharp
var array = new Godot.Collections.Array{"One", 2, 3, "Four"};
GD.Print(array[0]); // One。
GD.Print(array[2]); // 3。
GD.Print(array[array.Count - 1]); // Four。
array[2] = "Three";
GD.Print(array[array.Count - 2]); // Three。
可以使用 ``+`` 运算符连接数组:
.. tabs::
.. code-tab:: gdscript
var array1 = ["One", 2]
var array2 = [3, "Four"]
print(array1 + array2) # ["One", 2, 3, "Four"]
.. code-tab:: csharp
// C# 数组无法进行数组串联,但 Godot.Collections.Array 可以。
var array1 = new Godot.Collections.Array{"One", 2};
var array2 = new Godot.Collections.Array{3, "Four"};
GD.Print(array1 + array2); // Prints [One, 2, 3, Four]
\ **注意:**\ 数组总是通过引用来传递。要获得一个可以独立于原始数组而被修改的数组的副本,请使用 :ref:`duplicate<class_Array_method_duplicate>`\ 。
\ **注意:**\ **不**\ 支持在遍历数组时擦除元素,这将导致不可预知的行为。
.. note::
通过 C# 使用这个 API 时有显著的不同。详见 :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>` **(** :ref:`Array<class_Array>` base, :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`Array<class_Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedByteArray<class_PackedByteArray>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedColorArray<class_PackedColorArray>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat32Array<class_PackedFloat32Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat64Array<class_PackedFloat64Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt32Array<class_PackedInt32Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt64Array<class_PackedInt64Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedStringArray<class_PackedStringArray>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector3Array<class_PackedVector3Array>` from **)** |
+---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-reftable-group
方法
----
.. table::
:widths: auto
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`all<class_Array_method_all>` **(** :ref:`Callable<class_Callable>` method **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`any<class_Array_method_any>` **(** :ref:`Callable<class_Callable>` method **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`append<class_Array_method_append>` **(** :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`append_array<class_Array_method_append_array>` **(** :ref:`Array<class_Array>` array **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`assign<class_Array_method_assign>` **(** :ref:`Array<class_Array>` array **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`back<class_Array_method_back>` **(** **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`bsearch<class_Array_method_bsearch>` **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` before=true **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`bsearch_custom<class_Array_method_bsearch_custom>` **(** :ref:`Variant<class_Variant>` value, :ref:`Callable<class_Callable>` func, :ref:`bool<class_bool>` before=true **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`clear<class_Array_method_clear>` **(** **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`count<class_Array_method_count>` **(** :ref:`Variant<class_Variant>` value **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`duplicate<class_Array_method_duplicate>` **(** :ref:`bool<class_bool>` deep=false **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`erase<class_Array_method_erase>` **(** :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`fill<class_Array_method_fill>` **(** :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`filter<class_Array_method_filter>` **(** :ref:`Callable<class_Callable>` method **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`find<class_Array_method_find>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=0 **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`front<class_Array_method_front>` **(** **)** |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>` **(** :ref:`Variant<class_Variant>` value **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`hash<class_Array_method_hash>` **(** **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`insert<class_Array_method_insert>` **(** :ref:`int<class_int>` position, :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :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>` **(** :ref:`Array<class_Array>` 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>` **(** :ref:`Callable<class_Callable>` method **)** |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>` **(** :ref:`int<class_int>` position **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :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>` **(** :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`push_front<class_Array_method_push_front>` **(** :ref:`Variant<class_Variant>` value **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`reduce<class_Array_method_reduce>` **(** :ref:`Callable<class_Callable>` method, :ref:`Variant<class_Variant>` accum=null **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`remove_at<class_Array_method_remove_at>` **(** :ref:`int<class_int>` position **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`resize<class_Array_method_resize>` **(** :ref:`int<class_int>` size **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`reverse<class_Array_method_reverse>` **(** **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`rfind<class_Array_method_rfind>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=-1 **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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>` **(** :ref:`int<class_int>` begin, :ref:`int<class_int>` end=2147483647, :ref:`int<class_int>` step=1, :ref:`bool<class_bool>` deep=false **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`sort<class_Array_method_sort>` **(** **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`sort_custom<class_Array_method_sort_custom>` **(** :ref:`Callable<class_Callable>` func **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-reftable-group
操作符
------
.. table::
:widths: auto
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator !=<class_Array_operator_neq_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`operator +<class_Array_operator_sum_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator \<<class_Array_operator_lt_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator \<=<class_Array_operator_lte_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator ==<class_Array_operator_eq_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator ><class_Array_operator_gt_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`operator >=<class_Array_operator_gte_Array>` **(** :ref:`Array<class_Array>` right **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`operator []<class_Array_operator_idx_int>` **(** :ref:`int<class_int>` index **)** |
+-------------------------------+-------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
构造函数说明
------------
.. _class_Array_constructor_Array:
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** **)**
构造空的 **Array**\ 。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`Array<class_Array>` base, :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)**
``base`` 数组创建具有类型的数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`Array<class_Array>` from **)**
返回与 ``from`` 相同的数组。如果你需要一个数组的副本,请使用 :ref:`duplicate<class_Array_method_duplicate>`\ 。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedByteArray<class_PackedByteArray>` from **)**
:ref:`PackedByteArray<class_PackedByteArray>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedColorArray<class_PackedColorArray>` from **)**
:ref:`PackedColorArray<class_PackedColorArray>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedFloat32Array<class_PackedFloat32Array>` from **)**
:ref:`PackedFloat32Array<class_PackedFloat32Array>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedFloat64Array<class_PackedFloat64Array>` from **)**
:ref:`PackedFloat64Array<class_PackedFloat64Array>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedInt32Array<class_PackedInt32Array>` from **)**
:ref:`PackedInt32Array<class_PackedInt32Array>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedInt64Array<class_PackedInt64Array>` from **)**
:ref:`PackedInt64Array<class_PackedInt64Array>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedStringArray<class_PackedStringArray>` from **)**
:ref:`PackedStringArray<class_PackedStringArray>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` from **)**
:ref:`PackedVector2Array<class_PackedVector2Array>` 构造一个数组。
.. rst-class:: classref-item-separator
----
.. rst-class:: classref-constructor
:ref:`Array<class_Array>` **Array** **(** :ref:`PackedVector3Array<class_PackedVector3Array>` from **)**
:ref:`PackedVector3Array<class_PackedVector3Array>` 构造一个数组。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
方法说明
--------
.. _class_Array_method_all:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **all** **(** :ref:`Callable<class_Callable>` method **)** |const|
对数组中的每个元素调用提供的 :ref:`Callable<class_Callable>`\ ,如果 :ref:`Callable<class_Callable>` 为数组中的 *所有* 元素返回 ``true``\ ,则返回 ``true``\ 。如果 :ref:`Callable<class_Callable>` 为一个或多个数组元素返回 ``false``\ ,则此方法返回 ``false``\ 。
该可调用的方法应采用一个 :ref:`Variant<class_Variant>` 参数(当前数组元素)并返回一个布尔值。
::
func _ready():
print([6, 10, 6].all(greater_than_5)) # 输出 True3/3 元素评估为 `true`)。
print([4, 10, 4].all(greater_than_5)) # 输出 False1/3 元素评估为 `true`)。
print([4, 4, 4].all(greater_than_5)) # 输出 False0/3 元素评估为 `true`)。
print([].all(greater_than_5)) # 输出 True0/0 元素评估为 `true`)。
print([6, 10, 6].all(func(number): return number > 5)) # 输出 True。与上面的第一行相同但使用 lambda 函数。
func greater_than_5(number):
return number > 5
另请参见 :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** **(** :ref:`Callable<class_Callable>` method **)** |const|
对数组中的每个元素调用提供的 :ref:`Callable<class_Callable>`\ ,如果 :ref:`Callable<class_Callable>` 为数组中的\ * 一个或多个*\ 元素返回 ``true``\ ,则返回 ``true``\ 。如果 :ref:`Callable<class_Callable>` 为数组中的所有元素返回 ``false``\ ,则此方法返回 ``false``\ 。
可调用体的方法应接受一个 :ref:`Variant<class_Variant>` 参数(当前数组元素)并返回一个布尔值。
::
func _ready():
print([6, 10, 6].any(greater_than_5)) # 输出 True3 个元素评估为 `true`)。
print([4, 10, 4].any(greater_than_5)) # 输出 True1 个元素评估为 `true`)。
print([4, 4, 4].any(greater_than_5)) # 输出 False0 个元素评估为 `true`)。
print([].any(greater_than_5)) # 输出 False0 个元素评估为 `true`)。
print([6, 10, 6].any(func(number): return number > 5)) # 输出 True。与上面的第一行相同但使用 lambda 函数。
func greater_than_5(number):
return number > 5
另请参阅 :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** **(** :ref:`Variant<class_Variant>` 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** **(** :ref:`Array<class_Array>` array **)**
在该数组的末尾追加其他数组。
::
var array1 = [1, 2, 3]
var array2 = [4, 5, 6]
array1.append_array(array2)
print(array1) # 输出 [1, 2, 3, 4, 5, 6].
.. rst-class:: classref-item-separator
----
.. _class_Array_method_assign:
.. rst-class:: classref-method
void **assign** **(** :ref:`Array<class_Array>` array **)**
将另一个 ``array`` 的元素赋值到该数组中。调整数组大小以匹配 ``array``\ 。如果数组是有类型的,则执行类型转换。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_back:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **back** **(** **)** |const|
返回数组的最后一个元素。如果数组为空,则打印一个错误并返回 ``null``\ 。
\ **注意:**\ 调用这个函数与写入 ``array[-1]`` 不一样,如果数组是空的,当从编辑器运行时,按索引访问将暂停项目的执行。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_bsearch:
.. rst-class:: classref-method
:ref:`int<class_int>` **bsearch** **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` before=true **)** |const|
使用二进法查找已有值的索引(如果该值尚未存在于数组中,则为保持排序顺序的插入索引)。传递 ``before`` 说明符是可选的。如果该参数为 ``false``\ ,则返回的索引位于数组中该值的所有已有的条目之后。
\ **注意:**\ 在未排序的数组上调用 :ref:`bsearch<class_Array_method_bsearch>` 会产生预料之外的行为。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_bsearch_custom:
.. rst-class:: classref-method
:ref:`int<class_int>` **bsearch_custom** **(** :ref:`Variant<class_Variant>` value, :ref:`Callable<class_Callable>` func, :ref:`bool<class_bool>` before=true **)** |const|
使用二分法和自定义比较方法查找已有值的索引(如果该值尚未存在于数组中,则为保持排序顺序的插入索引)。传递 ``before`` 说明符是可选的。如果该参数为 ``false``\ ,则返回的索引位于数组中该值的所有已有条目之后。自定义方法接收两个参数(数组中的一个元素和搜索到的值),如果第一个参数小于第二个参数,则必须返回 ``true``\ ,否则返回 ``false`` .
\ **注意:**\ 在未排序的数组上调用 :ref:`bsearch_custom<class_Array_method_bsearch_custom>` 会产生预料之外的行为。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_clear:
.. rst-class:: classref-method
void **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** **(** :ref:`Variant<class_Variant>` value **)** |const|
返回元素在数组中出现的次数。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_duplicate:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **duplicate** **(** :ref:`bool<class_bool>` deep=false **)** |const|
返回该数组的副本。
\ ``deep````true`` 时会执行深拷贝:所有嵌套数组和字典都将被复制,且不会与原始数组共享。为 ``false`` 时则进行浅拷贝,并保留对原始嵌套数组和字典的引用,因此修改副本中的子数组或字典,也会影响源数组中引用的子数组或字典。请注意,无论 ``deep`` 如何设置,任何 :ref:`Object<class_Object>` 派生的元素都是浅拷贝的。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_erase:
.. rst-class:: classref-method
void **erase** **(** :ref:`Variant<class_Variant>` value **)**
从数组中移除第一个匹配的值。如果数组中不存在该值,则什么也不会发生。要通过索引移除元素,请改用 :ref:`remove_at<class_Array_method_remove_at>`\ 。
\ **注意:**\ 这个方法是就地操作的,不返回修改后的数组。
\ **注意:**\ 在大型数组上,如果移除的元素靠近数组的开头(索引 0则此方法会较慢。这是因为所有放置在移除元素之后的元素都必须重新索引。
\ **注意:**\ 在遍历数组时不要移除条目。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_fill:
.. rst-class:: classref-method
void **fill** **(** :ref:`Variant<class_Variant>` value **)**
将该数组中的所有元素都设置为给定的值。通常与 :ref:`resize<class_Array_method_resize>` 一起使用,用于创建给定大小的数组并对其元素进行初始化:
.. tabs::
.. code-tab:: gdscript
var array = []
array.resize(10)
array.fill(0) # 将 10 个元素都初始化为 0。
.. code-tab:: csharp
var array = new Godot.Collections.Array();
array.Resize(10);
array.Fill(0); // 将 10 个元素都初始化为 0。
\ **注意:**\ 如果 ``value`` 为引用类型(派生自 :ref:`Object<class_Object>`\ 、\ **Array**\ 、\ :ref:`Dictionary<class_Dictionary>` 等),那么会用同一个对象的引用填充该数组,即不会创建副本。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_filter:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **filter** **(** :ref:`Callable<class_Callable>` method **)** |const|
在数组中的每个元素上调用提供的 :ref:`Callable<class_Callable>`\ ,并返回一个新数组,其中包含调用方法后返回值为 ``true`` 的元素。
可调用的方法应该采用一个 :ref:`Variant<class_Variant>` 参数(当前数组元素)并返回一个布尔值。
::
func _ready():
print([1, 2, 3].filter(remove_1)) # 打印 [2, 3]。
print([1, 2, 3].filter(func(number): return number != 1)) # 同上,但使用 lambda 函数。
func remove_1(number):
return number != 1
另请参见 :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** **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=0 **)** |const|
在数组中搜索值并返回其索引,如果未找到则返回 ``-1`` 。可选地,可以传递起始搜索索引。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_front:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **front** **(** **)** |const|
返回数组的第一个元素。如果数组为空,则打印错误并返回 ``null``\ 。
\ **注意:**\ 调用这个函数和写 ``array[0]`` 是不一样的,如果数组为空,从编辑器运行时按索引访问将暂停项目执行。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_get_typed_builtin:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_typed_builtin** **(** **)** |const|
返回类型化数组的 :ref:`Variant.Type<enum_@GlobalScope_Variant.Type>` 常量。如果该 **Array** 不是类型化的,则返回 :ref:`@GlobalScope.TYPE_NIL<class_@GlobalScope_constant_TYPE_NIL>`\ 。
.. 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:`@GlobalScope.TYPE_OBJECT<class_@GlobalScope_constant_TYPE_OBJECT>` 的 类型化 **Array** 的类名。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_get_typed_script:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **get_typed_script** **(** **)** |const|
返回与此类型化数组绑定的类名关联的脚本。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_has:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **has** **(** :ref:`Variant<class_Variant>` value **)** |const|
如果该数组包含给定值,则返回 ``true``\ 。
.. tabs::
.. code-tab:: gdscript
print(["inside", 7].has("inside")) # 真
print(["inside", 7].has("outside")) # 假
print(["inside", 7].has(7)) # 真
print(["inside", 7].has("7")) # 假
.. code-tab:: csharp
var arr = new Godot.Collections.Array { "inside", 7 };
// has 被改名为 Contains
GD.Print(arr.Contains("inside")); // 真
GD.Print(arr.Contains("outside")); // 假
GD.Print(arr.Contains(7)); // 真
GD.Print(arr.Contains("7")); // 假
\ **注意:**\ 这相当于使用 ``in`` 运算符,如下所示:
.. tabs::
.. code-tab:: gdscript
# 将评估为`true`
if 2 in [2, 4, 6, 8]:
print("包含!")
.. code-tab:: csharp
// 由于 C# 中没有关键字“in”因此必须使用 Contains
var array = new Godot.Collections.Array { 2, 4, 6, 8 };
if (array.Contains(2))
{
GD.Print("包含!");
}
.. rst-class:: classref-item-separator
----
.. _class_Array_method_hash:
.. rst-class:: classref-method
:ref:`int<class_int>` **hash** **(** **)** |const|
返回代表该数组及其内容的 32 位整数哈希值。
\ **注意:**\ 内容相同的 **Array** 会得到一致的哈希值。然而,反之不然。返回一致的哈希值\ *并不*\ 意味着数组相等,因为不同的数组可能因为哈希碰撞而得到一致的哈希值。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_insert:
.. rst-class:: classref-method
:ref:`int<class_int>` **insert** **(** :ref:`int<class_int>` position, :ref:`Variant<class_Variant>` value **)**
在给定的数组位置插入一个新值。位置必须合法,或者是在数组末尾(\ ``pos == size()``\ )。操作成功时返回 :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>`\ ,而如果操作失败则返回其他任意一个 :ref:`Error<enum_@GlobalScope_Error>` 值。
\ **注意:**\ 该方法在原地执行,不会返回修改过的数组。
\ **注意:**\ 在较大的数组中,如果插入值的位置在数组偏前的位置,这个方法的运行速度会比较慢,因为在插入值后面所有的元素都要被重新索引。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_is_empty:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_empty** **(** **)** |const|
该数组为空时,返回 ``true``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_is_read_only:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_read_only** **(** **)** |const|
如果该数组只读,则返回 ``true``\ 。见 :ref:`make_read_only<class_Array_method_make_read_only>`\ 。如果数组是用 ``const`` 关键字声明的,则自动只读。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_is_same_typed:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_same_typed** **(** :ref:`Array<class_Array>` array **)** |const|
如果该数组的类型与 ``array`` 相同,则返回 ``true``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_is_typed:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_typed** **(** **)** |const|
如果该数组是类型化的,则返回 ``true``\ 。类型化数组只能存储与其关联类型的元素,能够为其 ``[]`` 运算符提供类型安全支持。类型化数组的方法仍然返回 :ref:`Variant<class_Variant>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_make_read_only:
.. rst-class:: classref-method
void **make_read_only** **(** **)**
使该数组只读,即禁止修改该数组的元素。不适用于嵌套的内容,例如嵌套数组的内容。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_map:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **map** **(** :ref:`Callable<class_Callable>` method **)** |const|
为数组中的每个元素调用提供的 :ref:`Callable<class_Callable>` 并返回一个新数组,其中填充了该调用方法返回的值。
可调用的方法应该采用一个 :ref:`Variant<class_Variant>` 参数(当前数组元素)并且可以返回任意 :ref:`Variant<class_Variant>`\ 。
::
func _ready():
print([1, 2, 3].map(negate)) # 打印 [-1, -2, -3].
print([1, 2, 3].map(func(number): return -number)) # 同上,但使用 lambda 函数。
func negate(number):
return -number
另请参见 :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|
如果数组中包含的所有元素都是可比较的类型,则返回其中的最大值。如果无法比较,则返回 ``null``\ 。
要使用自定义比较器来查找最大值,可以使用 :ref:`reduce<class_Array_method_reduce>`\ 。这个例子中会比较数组中的每个元素,并返回第一个最大值:
::
func _ready():
var arr = [Vector2(0, 1), Vector2(2, 0), Vector2(1, 1), Vector2(1, 0), Vector2(0, 2)]
# 这个例子中我们比较的是长度。
print(arr.reduce(func(max, val): return val if is_length_greater(val, max) else max))
func is_length_greater(a, b):
return a.length() > b.length()
.. rst-class:: classref-item-separator
----
.. _class_Array_method_min:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **min** **(** **)** |const|
如果数组中包含的所有元素都是可比较的类型,则返回其中的最小值。如果无法比较,则返回 ``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|
从目标数组中返回一个随机值。如果数组为空,则打印一个错误并返回 ``null``\ 。
.. tabs::
.. code-tab:: gdscript
var array: Array[int] = [1, 2, 3, 4]
print(array.pick_random()) # 打印四个数字中的任何一个。
.. code-tab:: csharp
var array = new Godot.Collections.Array { 1, 2, 3, 4 };
GD.Print(array.PickRandom()); // 打印四个数字中的任何一个。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_pop_at:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **pop_at** **(** :ref:`int<class_int>` position **)**
移除并返回数组中位于 ``position`` 索引处的元素。如果 ``position`` 为负数,则认为是相对于该数组末尾的值。如果该数组为空,则返回 ``null``\ ,不会改动数组。数组访问越界时会输出错误消息,但如果数组为空时不会。
\ **注意:**\ 在较大的数组上,这个方法会比 :ref:`pop_back<class_Array_method_pop_back>` 慢,因为会对移除元素后的数组元素重新进行索引。数组越大,或者移除元素的索引越小,\ :ref:`pop_at<class_Array_method_pop_at>` 就越慢。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_pop_back:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **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** **(** **)**
移除并返回数组的第一个元素。如果数组是空的,将不会输出任何错误信息并返回 ``null``\ 。另请参阅 :ref:`pop_back<class_Array_method_pop_back>`\ 。
\ **注意:**\ 当数组元素很多时,由于 :ref:`pop_front<class_Array_method_pop_front>` 每次调用时都要重新寻找数组所有元素的索引,所以会比 :ref:`pop_back<class_Array_method_pop_back>` 慢很多。数组越大,\ :ref:`pop_front<class_Array_method_pop_front>` 越慢。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_push_back:
.. rst-class:: classref-method
void **push_back** **(** :ref:`Variant<class_Variant>` value **)**
在数组的末端追加一个元素。另请参阅 :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** **(** :ref:`Variant<class_Variant>` value **)**
在数组的开头添加一个元素。另请参阅 :ref:`push_back<class_Array_method_push_back>`\ 。
\ **注意:**\ 在大数组中,这个方法比 :ref:`push_back<class_Array_method_push_back>` 慢得多,因为每次调用它都会重新索引所有数组的元素。数组越大,\ :ref:`push_front<class_Array_method_push_front>` 的速度就越慢。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_reduce:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **reduce** **(** :ref:`Callable<class_Callable>` method, :ref:`Variant<class_Variant>` accum=null **)** |const|
为数组中的每个元素调用给定的 :ref:`Callable<class_Callable>` 并将结果累积在 ``accum`` 中。
该可调用体的方法接受两个参数:\ ``accum`` 的当前值,以及当前的数组元素。如果 ``accum````null``\ (默认值),则会从第二个元素开始迭代,将第一个元素作为 ``accum`` 的初始值。
::
func _ready():
print([1, 2, 3].reduce(sum, 10)) # 输出 16.
print([1, 2, 3].reduce(func(accum, number): return accum + number, 10)) # 同上,但使用 lambda 函数。
func sum(accum, number):
return accum + number
另见 :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** **(** :ref:`int<class_int>` position **)**
通过索引从数组中移除元素。如果索引在数组中不存在,则什么也不会发生。要通过搜索一个元素的值来移除,请改用 :ref:`erase<class_Array_method_erase>`\ 。
\ **注意:**\ 这个方法是就地操作的,不返回修改后的数组。
\ **注意:**\ 在大数组中,如果被删除的元素靠近数组的开头(索引 0这个方法会比较慢。这是因为所有放置在被移除元素之后的元素都要被重新索引。
\ **注意:**\ ``position`` 不能为负。要移除数组末尾的元素,请使用 ``arr.remove_at(arr.size() - (i + 1))``\ 。要移除数组末尾的元素并不返回值,请使用 ``arr.resize(arr.size() - 1)``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_resize:
.. rst-class:: classref-method
:ref:`int<class_int>` **resize** **(** :ref:`int<class_int>` size **)**
调整数组的大小,让包含的元素数量发生变化。如果数组变小则清除多余元素,变大则新元素为 ``null``\ 。成功时返回 :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>`\ ,操作失败时返回其他 :ref:`Error<enum_@GlobalScope_Error>` 值。
\ **注意:**\ 这个方法是就地操作的,不返回修改后的数组。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_reverse:
.. rst-class:: classref-method
void **reverse** **(** **)**
将数组中的元素逆序排列。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_rfind:
.. rst-class:: classref-method
:ref:`int<class_int>` **rfind** **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=-1 **)** |const|
逆序搜索数组。还可以传递起始搜索位置索引。如果为负,则起始索引被视为相对于数组的结尾。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_shuffle:
.. rst-class:: classref-method
void **shuffle** **(** **)**
将数组打乱,元素随机排列。该方法使用全局随机数生成器,与 :ref:`@GlobalScope.randi<class_@GlobalScope_method_randi>` 等方法一致。如果你想每次都使用新的种子,让打乱无法重现,则可以调用 :ref:`@GlobalScope.randomize<class_@GlobalScope_method_randomize>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_size:
.. rst-class:: classref-method
:ref:`int<class_int>` **size** **(** **)** |const|
返回数组中元素的个数。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_slice:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **slice** **(** :ref:`int<class_int>` begin, :ref:`int<class_int>` end=2147483647, :ref:`int<class_int>` step=1, :ref:`bool<class_bool>` deep=false **)** |const|
返回该 **Array** 的切片,是从 ``begin``\ (含)到 ``end``\ (不含)的全新 **Array**\ 。
\ ``begin````end`` 的绝对值会按数组大小进行限制,所以 ``end`` 的默认值会切到数组大小为止(即 ``arr.slice(1)````arr.slice(1, arr.size())`` 的简写)。
如果 ``begin````end`` 为负,则表示相对于数组的末尾(即 ``arr.slice(0, -2)````arr.slice(0, arr.size() - 2)`` 的简写)。
如果指定了 ``step``\ ,则会用作原始元素的索引间距。这个参数可以为负,此时 ``begin`` 必须大于 ``end``\ 。例如,\ ``[0, 1, 2, 3, 4, 5].slice(5, 1, -2)`` 会返回 ``[5, 3]``\ 。
如果 ``deep`` 为 true则每个元素都会按值复制而不是按引用复制。
\ **注意:**\ 要在 ``step`` 为负时包含第一个元素,请使用 ``arr.slice(begin, -arr.size() - 1, step)``\ (即 ``[0, 1, 2].slice(1, -4, -1)`` 返回 ``[1, 0]``\ )。
.. rst-class:: classref-item-separator
----
.. _class_Array_method_sort:
.. rst-class:: classref-method
void **sort** **(** **)**
对数组进行排序。
\ **注意:**\ 排序所使用的算法并不\ `稳定 <https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#%E7%A9%A9%E5%AE%9A%E6%80%A7>`__\ 。也就是说,使用 :ref:`sort<class_Array_method_sort>` 时相等的值之间的顺序可能会改变。
\ **注意:**\ 字符串按字母顺序排序(与自然顺序相反)。当对一个以数字序列结尾的字符串数组进行排序时,这可能会导致意外的行为。请看下面的例子:
.. tabs::
.. code-tab:: gdscript
var strings = ["string1", "string2", "string10", "string11"]
strings.sort()
print(strings) # 输出 [string1, string10, string11, string2]
.. code-tab:: csharp
var strings = new Godot.Collections.Array { "string1", "string2", "string10", "string11" };
strings.Sort();
GD.Print(strings); // 输出 [string1, string10, string11, string2]
要执行自然顺序排序,可以使用 :ref:`sort_custom<class_Array_method_sort_custom>` 和 :ref:`String.naturalnocasecmp_to<class_String_method_naturalnocasecmp_to>`\ ,如下所示:
::
var strings = ["string1", "string2", "string10", "string11"]
strings.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)
print(strings) # 输出 [string1, string2, string10, string11]
.. rst-class:: classref-item-separator
----
.. _class_Array_method_sort_custom:
.. rst-class:: classref-method
void **sort_custom** **(** :ref:`Callable<class_Callable>` func **)**
使用自定义的方法对数组进行排序。自定义方法接受两个参数(数组中的一对元素),并且必须返回 ``true`` 或者 ``false``\ 。对于两个元素 ``a````b``\ ,如果给定的方法返回 ``true``\ ,数组中的元素 ``b`` 将排在元素 ``a`` 之后。
\ **注意:**\ 排序所使用的算法并不\ `稳定 <https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#%E7%A9%A9%E5%AE%9A%E6%80%A7>`__\ 。也就是说,使用 :ref:`sort_custom<class_Array_method_sort_custom>` 时相等的值之间的顺序可能会改变。
\ **注意:**\ 你不能随机化返回值,因为堆排序算法期望确定的结果。随机化返回值将导致意外行为。
.. tabs::
.. code-tab:: gdscript
func sort_ascending(a, b):
if a[0] < b[0]:
return true
return false
func _ready():
var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]
my_items.sort_custom(sort_ascending)
print(my_items) # 输出 [[4, Tomato], [5, Potato], [9, Rice]].
# Descending, lambda version.
my_items.sort_custom(func(a, b): return a[0] > b[0])
print(my_items) # 输出 [[9, Rice], [5, Potato], [4, Tomato]].
.. code-tab:: csharp
// Godot.Collections.Array 不支持自定义排序
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
操作符说明
----------
.. _class_Array_operator_neq_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator !=** **(** :ref:`Array<class_Array>` right **)**
将左操作数 **Array** 与右操作数 ``right`` **Array** 进行比较。如果大小或内容\ *不相等*\ ,则返回 ``true``\ ,否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_sum_Array:
.. rst-class:: classref-operator
:ref:`Array<class_Array>` **operator +** **(** :ref:`Array<class_Array>` right **)**
连接两个 **Array**\ ,右操作数 ``right`` **Array** 加到左操作数指定的 **Array** 的末尾。例如,\ ``[1, 2] + [3, 4]`` 的结果是 ``[1, 2, 3, 4]``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_lt_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator <** **(** :ref:`Array<class_Array>` right **)**
对左操作数 **Array** 和右操作数 ``right`` **Array** 之间的各个索引进行比较,考虑两个数组的最高公共索引:遇到第一个不同的元素时,如果该元素较小则返回 ``true``\ ,如果该元素较大则返回 ``false``\ 。请注意,部分类型的存储数据可能导致本函数的递归调用。如果所有元素都相等,则比较两个数组的长度,如果左操作数 **Array** 元素较少则返回 ``false``\ ,否则返回 ``true``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_lte_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator <=** **(** :ref:`Array<class_Array>` right **)**
对左操作数 **Array** 和右操作数 ``right`` **Array** 之间的各个索引进行比较,考虑两个数组的最高公共索引:遇到第一个不同的元素时,如果该元素较小则返回 ``true``\ ,如果该元素较大则返回 ``false``\ 。请注意,部分类型的存储数据可能导致本函数的递归调用。如果所有元素都相等,则比较两个数组的长度,如果左操作数 **Array** 元素数量相等或较少则返回 ``true``\ ,否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_eq_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator ==** **(** :ref:`Array<class_Array>` right **)**
将左操作数 **Array** 与 ``right`` **Array** 进行比较。如果数组的大小和内容相等,则返回 ``true``\ ,否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_gt_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator >** **(** :ref:`Array<class_Array>` right **)**
对左操作数 **Array** 和右操作数 ``right`` **Array** 之间的各个索引进行比较,考虑两个数组的最高公共索引:遇到第一个不同的元素时,如果该元素较大则返回 ``true``\ ,如果该元素较小则返回 ``false``\ 。请注意,部分类型的存储数据可能导致本函数的递归调用。如果所有元素都相等,则比较两个数组的长度,如果左操作数 **Array** 元素较多则返回 ``true``\ ,否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_gte_Array:
.. rst-class:: classref-operator
:ref:`bool<class_bool>` **operator >=** **(** :ref:`Array<class_Array>` right **)**
对左操作数 **Array** 和右操作数 ``right`` **Array** 之间的各个索引进行比较,考虑两个数组的最高公共索引:遇到第一个不同的元素时,如果该元素较大则返回 ``true``\ ,如果该元素较小则返回 ``false``\ 。请注意,部分类型的存储数据可能导致本函数的递归调用。如果所有元素都相等,则比较两个数组的长度,如果左操作数 **Array** 元素数量相等或较多则返回 ``true``\ ,否则返回 ``false``\ 。
.. rst-class:: classref-item-separator
----
.. _class_Array_operator_idx_int:
.. rst-class:: classref-operator
:ref:`Variant<class_Variant>` **operator []** **(** :ref:`int<class_int>` index **)**
该函数返回指定位置的 :ref:`Variant<class_Variant>` 类型元素的引用。数组从索引0开始。 ``index`` 可以是一个从头开始的零或正值,也可以是一个从末尾开始的负值。访问越界的数组会导致运行时错误,这将导致在编辑器中运行时打印错误并暂停项目执行。
.. |virtual| replace:: :abbr:`virtual (本方法通常需要用户覆盖才能生效。)`
.. |const| replace:: :abbr:`const (本方法没有副作用。不会修改该实例的任何成员变量。)`
.. |vararg| replace:: :abbr:`vararg (本方法除了在此处描述的参数外,还能够继续接受任意数量的参数。)`
.. |constructor| replace:: :abbr:`constructor (本方法用于构造某个类型。)`
.. |static| replace:: :abbr:`static (调用本方法无需实例,所以可以直接使用类名调用。)`
.. |operator| replace:: :abbr:`operator (本方法描述的是使用本类型作为左操作数的有效操作符。)`
.. |bitfield| replace:: :abbr:`BitField (这个值是由下列标志构成的位掩码整数。)`