Array¶
通用数组数据类型。
描述¶
一个通用数组,可以包含多个任何类型的元素,可以通过从 0 开始的数字索引进行访问。负数索引可以用来从后面数起,就像在 Python 中一样(-1 是最后一个元素、-2 是倒数第二,等等)。
Example:
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。
数组可以使用 +
操作符进行连接。
var array1 = ["One", 2]
var array2 = [3, "4"]
print(array1 + array2) # ["One", 2, 3, "Four"]
注意:用 +=
操作符串联将创建一个新的数组,这是有代价的。如果你想把另一个数组追加到现有的数组中,append_array 会更有效。
注意:数组总是通过引用来传递。要获得一个可以独立于原始数组而被修改的数组的副本,请使用 duplicate。
注意:当用 const
声明数组时,数组本身仍然可以通过定义各个索引上的值或推/移元素而被修改。使用 const
只能防止在初始化常数后将其赋值给另一个值。
方法¶
Array ( PoolColorArray from ) |
|
Array ( PoolVector3Array from ) |
|
Array ( PoolVector2Array from ) |
|
Array ( PoolStringArray from ) |
|
Array ( PoolRealArray from ) |
|
Array ( PoolIntArray from ) |
|
Array ( PoolByteArray from ) |
|
void |
|
void |
append_array ( Array array ) |
back ( ) |
|
bsearch_custom ( Variant value, Object obj, String func, bool before=true ) |
|
void |
clear ( ) |
empty ( ) |
|
void |
|
front ( ) |
|
hash ( ) |
|
void |
|
void |
invert ( ) |
max ( ) |
|
min ( ) |
|
pop_back ( ) |
|
pop_front ( ) |
|
void |
|
void |
push_front ( Variant value ) |
void |
|
void |
|
void |
shuffle ( ) |
size ( ) |
|
void |
sort ( ) |
void |
sort_custom ( Object obj, String func ) |
方法说明¶
Array Array ( PoolColorArray from )
从PoolColorArray构建一个数组。
Array Array ( PoolVector3Array from )
从一个PoolVector3Array构建一个数组。
Array Array ( PoolVector2Array from )
从PoolVector2Array构造一个数组。
Array Array ( PoolStringArray from )
从PoolStringArray构建一个数组。
Array Array ( PoolRealArray from )
从PoolRealArray构造一个数组。
Array Array ( PoolIntArray from )
从PoolIntArray构建一个数组。
Array Array ( PoolByteArray from )
从PoolByteArray构建一个数组。
void append ( Variant value )
向数组末尾追加一个元素(push_back 的别名)。
void append_array ( Array array )
在此数组的末尾追加另一个数组。
var array1 = [1, 2, 3]
var array2 = [4, 5, 6]
array1.append_array(array2)
print(array1) # 打印 [1, 2, 3, 4, 5, 6].
Variant back ( )
返回数组的最后一个元素。如果数组为空,则打印一个错误并返回null
。
注意: 调用这个函数与写入array[-1]
不一样,如果数组是空的,当从编辑器运行时,按索引访问将暂停项目的执行。
使用二分法查找已有值的索引(该值不存在时,为现有顺序下的插入索引)。before
参数是可选的,为 false
时返回的索引位于数组中所有同值元素之后。
注意: 在未排序的数组上调用 bsearch 会产生预料之外的行为。
使用二分法查找以及在obj
中声明的自定义比较方法,已有值的索引(该值不存在时,为现有顺序下的插入索引)。before
参数是可选的,为 false
时返回的索引位于数组中所有同值元素之后。自定义方法接收两个参数(数组中的值和要搜索的值),如果第一个参数小于第二个参数,必须返回true
,否则返回false
。
func cardinal_to_algebraic(a):
match a:
"one":
return 1
"two":
return 2
"three":
return 3
"four":
return 4
_:
return 0
func compare(a, b):
return cardinal_to_algebraic(a) < cardinal_to_algebraic(b)
func _ready():
var a = ["one", "two", "three", "four"]
# `compare`是在这个对象中定义的,所以我们用`self`作为`obj`参数。
print(a.bsearch_custom("three", self, "compare", true))# 预期的值是2。
注意: 在未排序的数组上调用bsearch_custom会导致预料之外的行为。
void clear ( )
清空数组。与调用 resize 时指定大小为 0
等价。
返回元素在数组中出现的次数。
返回该数组的副本。
deep
为 true
时会执行深拷贝:复制所有嵌套数组和字典,不与原数组共享。为 false
时为浅拷贝,会维持对原有嵌套数组和字典的引用,所以修改副本中的子数组或者字典也会影响原数组所引用的内容。
bool empty ( )
该数组为空时,返回 true
。
void erase ( Variant value )
从数组中删除第一次出现的值。要按索引删除元素,请改用 remove。
注意: 该方法就地操作,不返回值。
注意: 在大型数组上,如果移除的元素靠近数组的开头(索引 0),则此方法会较慢。这是因为所有放置在删除元素之后的元素都必须重新索引。
在数组中查找指定的值,返回对应的索引,未找到时返回 -1
。还可以传入搜索起始位置的索引。
在数组中逆序查找指定的值,返回对应的索引,未找到时返回 -1
。
Variant front ( )
返回数组的第一个元素。如果数组为空,则打印错误并返回 null
。
注:调用这个函数和写array[0]
是不一样的,如果数组为空,从编辑器运行时按索引访问将暂停项目执行。
如果数组包含指定值时,返回 true
。
["inside", 7].has("inside") # True
["inside", 7].has("outside") # False
["inside", 7].has(7) # True
["inside", 7].has("7") # False
**注意:**\ 这等同于使用\ ``in``\ 操作符,如下所示。
# 将评估为 `true`。
if 2 in [2, 4, 6, 8]:
pass
int hash ( )
返回这个数组的整数哈希值
注意: 仅仅内容相同的数组会产生不同的哈希值, 必须要完全一致的数组才会产生相同的哈希值.
在给定的数组位置插入一个新值. 位置必须合法, 或者在数组末尾(pos == size()
).
注意: 这个数组没有返回值.
注意: 在较大的数组中, 如果插入值的位置在数组偏前的位置, 这个方法的运行速度会比较慢, 因为在插入值后面所有的元素都要被重新索引.
void invert ( )
将数组中的元素逆序排列。
Variant max ( )
如果数组中的所有元素都是可比较的类型,返回其中的最大值。如果无法比较,返回 null
。
Variant min ( )
如果数组中的所有元素都是可比较的类型,返回其中的最小值。如果无法比较,返回 null
。
移除并返回索引position
处的数组元素。如果是负数,position
被认为是相对于数组的末端。如果数组是空的或者被越界访问,则保留数组不动,并返回null
。当数组被越界访问时,会打印出一条错误信息,但当数组为空时,则不会。
注意: 在大的数组上,这个方法可能比pop_back慢,因为它将重新索引位于被移除元素之后的数组元素。数组越大,被移除元素的索引越低,pop_at的速度就越慢。
Variant pop_back ( )
删除并返回数组中的末尾元素。数组为空时,返回 null
。另请参阅 pop_front。
Variant pop_front ( )
移除并返回数组的第一个元素。如果数组是空的,将不会输出任何错误信息并返回null
。另请参阅 pop_back。
注意: 当数组元素很多时,由于 pop_front 每次调用时都要重新寻找数组所有元素的索引,所以会比 pop_back 慢很多。数组 越大,pop_front 越慢。
void push_back ( Variant value )
在数组的末端添加一个元素。参阅push_front。
void push_front ( Variant value )
在数组的开头添加一个元素。参阅push_back。
注意: 在大数组中,这个方法比push_back慢得多,因为每次调用它都会重新索引所有数组的元素。数组越大,push_front的速度就越慢。
void remove ( int position )
按索引从数组中移除一个元素。如果索引在数组中不存在,则什么也不会发生。要通过搜索一个元素的值来移除它,请使用erase来代替。
注意: 这个方法是就地操作,不返回值。
注意: 在大数组中,如果被删除的元素靠近数组的开头(索引0),这个方法会比较慢。这是因为所有放置在被移除元素之后的元素都要被重新索引。
void resize ( int size )
调整数组至包含不同数量的元素。如果数组变小则清除多余元素,变大则新元素为 null
。
逆序搜索数组。还可以传入搜索起始位置的索引,如果为负数,则起始位置从数组的末尾开始计算。
void shuffle ( )
将数组打乱,元素随机排列。该方法使用全局随机数生成器,与 @GDScript.randi 等方法一致。如果你想每次都使用新的种子,让打乱无法重现,则可以调用 @GDScript.randomize。
int size ( )
返回数组中元素的个数。
复制函数中描述的子集并以数组形式返回,如果deep
为true
,则深度复制数组。下索引和上索引是包含的,step
描述了分片时索引之间的变化。
void sort ( )
对数组进行排序。
注意:字符串按字母顺序排序(与自然顺序相反)。当对一个以数字序列结尾的字符串数组进行排序时,这可能会导致意外的行为。请看下面的例子。
var strings = ["string1", "string2", "string10", "string11"]
strings.sort()
print(strings) # 输出 [string1, string10, string11, string2]
使用一个自定义的方法对数组进行排序。参数是一个持有该方法的对象和该方法的名称。自定义方法接收两个参数(一对来自数组的元素),并且必须返回 true
或者 false
。
对于两个元素 a
和 b
,如果给定的方法返回 true
,元素 b
将在数组中元素 a
之后。
注意:你不能随机化返回值,因为堆排序算法期望一个确定的结果。而这样做会导致意外的行为。
class MyCustomSorter:
static func sort_ascending(a, b):
if a[0] < b[0]:
return true
return false
var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]]
my_items.sort_custom(MyCustomSorter, "sort_ascending")
print(my_items) # 输出 [[4, Tomato], [5, Potato], [9, Rice]]。