动态数组
动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标;动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。
unrealscript中动态数组
对于动态数组,类型可以使用关键字 array 来指定,后面跟着由尖括号括起的数组类型。 如果数组类型也包含尖括号(比如 class<Actor> ),你必须在类型的结束括号和数组的结束括号之间加入空格,否则编译器会把这两个结束括号作为 >> 操作符来处理。
var array<数据类型> 数据名;
例如
var array<int> moreColor;
我要定义个动态数组决定元素的个数,并查看它的长度
class MyUSGame extends actor
placeable;
var array<int> moreColor;
function PostBeginPlay()
{
moreColor[5]=100;
`log("color5's value:"@moreColor[5]);
`log("color5's length:"@moreColor.Length);
}
我们还没确定数组的元素长度,所以我们可以之后再定义它。
UDN资料
长度变量动态数组也有一个变量叫 Length ,它是指动态数组的当前长度(元素的个数)。要想访问Length,通过使用我们的示例数组,我们可以这样操作: IntList.Length 。 我们不仅能读取这个Length变量,并且我们可以直接设置它,从而允许我们修改数组中元素的数量。当您直接修改Length变量时,在数组长度中的所有改变都在数组的末端发生。比如,如果我们设置 IntList.Length = 5,然后我们再设置IntList.Length = 10,那么我们刚刚添加的额外的5个元素会添加到数组的末端,同时保持我们原始的5个元素及其它们的值。如果我们降低Length,元素也会被从数组的末端拿掉。注意当您想一个数组增加元素时,不管是通过Insert()函数还是通过增加长度,元素都会被初始化为它的变量类型的默认值(ints为0,类的引用为None等)。值得注意的是您也可以通过设置元素的索引比当前的Length值大来增加动态数组的长度。这将和您设置Length的值为较大的值来扩展数组是一样的。
长度变量动态数组也有一个变量叫 Length ,它是指动态数组的当前长度(元素的个数)。要想访问Length,通过使用我们的示例数组,我们可以这样操作: IntList.Length 。 我们不仅能读取这个Length变量,并且我们可以直接设置它,从而允许我们修改数组中元素的数量。当您直接修改Length变量时,在数组长度中的所有改变都在数组的末端发生。比如,如果我们设置 IntList.Length = 5,然后我们再设置IntList.Length = 10,那么我们刚刚添加的额外的5个元素会添加到数组的末端,同时保持我们原始的5个元素及其它们的值。如果我们降低Length,元素也会被从数组的末端拿掉。注意当您想一个数组增加元素时,不管是通过Insert()函数还是通过增加长度,元素都会被初始化为它的变量类型的默认值(ints为0,类的引用为None等)。值得注意的是您也可以通过设置元素的索引比当前的Length值大来增加动态数组的长度。这将和您设置Length的值为较大的值来扩展数组是一样的。
OldLength = Array.length
Array.Length = OldLength + 1
Array[OldLength] = NewValue
Array[Array.Length] = NewValue
Array.AddItem(NewValue)
所有这些都是同一个操作的等价形式。
注意,您不能同时增加数组的长度并访问数组的成员。
Array[Array.length].myStructVariable = newVal
这是无效的。
注意 – 动态数组的成员Length是不能通过'++', '--', '+=', or '-='来进行增量/减量运算的,也不能将Length作为一个输出参数传递给一个函数(那个函数能够改变它的值)。由于这样做使Length不再是精确的,从而会导致内存泄露和崩溃;仅能通过使用 '=' 操作符来设置Length(并设置设置一个元素所在的索引大于Length)来适当地修改动态数组的实际长度。
注意: 不支持 array<bool> 类型!
最后需要注意的是 - 动态数组是 不能 复制(注意这个"复制"是指Replicate, 不是Copy)的。您可以通过可以复制数组的函数来解决这个问题,并且具有两个参数:一个是动态数组的一个索引及那个索引处所存储的值。然而,你也必须要考虑在客户端和服务器的一次更新时间间隔内元素不一样的后果。
Array.Length = OldLength + 1
Array[OldLength] = NewValue
Array[Array.Length] = NewValue
Array.AddItem(NewValue)
所有这些都是同一个操作的等价形式。
注意,您不能同时增加数组的长度并访问数组的成员。
Array[Array.length].myStructVariable = newVal
这是无效的。
注意 – 动态数组的成员Length是不能通过'++', '--', '+=', or '-='来进行增量/减量运算的,也不能将Length作为一个输出参数传递给一个函数(那个函数能够改变它的值)。由于这样做使Length不再是精确的,从而会导致内存泄露和崩溃;仅能通过使用 '=' 操作符来设置Length(并设置设置一个元素所在的索引大于Length)来适当地修改动态数组的实际长度。
注意: 不支持 array<bool> 类型!
最后需要注意的是 - 动态数组是 不能 复制(注意这个"复制"是指Replicate, 不是Copy)的。您可以通过可以复制数组的函数来解决这个问题,并且具有两个参数:一个是动态数组的一个索引及那个索引处所存储的值。然而,你也必须要考虑在客户端和服务器的一次更新时间间隔内元素不一样的后果。