vb.net数组声明数组变量示例
数组变量的声明与其他变量的声明一样,使用 Dim
语句。在变量名后加上一对或几对圆括号,即可表示它是数组而不是“标量”(包含单个值的变量)。
声明单维数组变量
- 在声明中,在变量名后添加一对圆括号,如下例所示:
Dim MySingleArray() As Integer
-
或者是 Dim MySingleArray(n) As Integer :里面的n不是数组大小,而是数组索引最大值,如定义3个数组,则n=2,如 MySingleArray(0), MySingleArray(1), MySingleArray(2)
声明多维数组变量
- 在声明中,在变量名后添加一对圆括号并将逗号置于圆括号中以分隔维数,如下例所示:
Dim My4DArray(,,,) As Short ' Four-dimensional array.
声明交错数组变量
- 在声明中,在变量名后添加的圆括号对数与嵌套数组的级数相同,如下例所示:
Dim MyJaggedArray()()() As Byte ' Array of arrays of Byte arrays.
初始化数组
可以将一个数组变量初始化为声明的一部分。在声明语句中可以进行下列操作之一:
- 在变量名后跟的圆括号中指定一个或几个维度的初始长度,不必为变量分配数组对象。
- 使用 New 子句为变量分配数组对象。使用 New 子句时,其后必须跟有花括号
({}),即使花括号内没有任何内容也是如此。 - 为变量分配一个数组对象,并在 New 子句中提供初始长度。
- 为变量分配数组对象并在 New 子句中提供初始元素值。可以在同一 New 子句中同时提供长度与值。
如果在变量名后跟随的圆括号中指定了维度长度,必须在它后面使用一个赋值语句,以将一个数组对象分配给变量。下面的示例声明说明了一个单维数组变量的有效和无效语法:
Dim BA(2) As Byte ' Currently contains Nothing (no object). Dim BA(2) As Byte = New Byte() ' INVALID (New after length specified). Dim BA() As Byte = New Byte() {} ' Empty Byte array object. Dim BA() As Byte = New Byte() ' INVALID (missing braces). Dim BA() As Byte = New Byte(2) ' INVALID (missing braces). Dim BA() As Byte = New Byte() {0,1,2} ' (0) through (2). Dim BA() As Byte = New Byte(2) {0,1,2} ' (0) through (2).
以类似方法可以初始化多维数组变量。下面的示例声明将一个两维数组变量声明为 2 行 2 列的 Short 型数组。
Dim S2X2(1, 1) As Short ' (0) through (1), (0) through (1). Dim S2X2(1, 1) As Short = New Short(,) ' INVALID (New after lengths). Dim S2X2(,) As Short = New Short(,) ' INVALID (missing braces). Dim S2X2(,) As Short = New Short(1, 1) ' INVALID (missing braces). Dim S2X2(,) As Short = New Short(,) {} ' Empty array object. Dim S2X2(,) As Short = New Short(1, 1) {} ' Elements have default value. Dim S2X2(,) As Short = New Short(,) {{5, 6}, {7, 8}} ' Four elements.
第一个参数表示行;第二个参数表示列。在前面声明的数组中,行与列的索引值都是从 0 变化到 1。
当初始化一个交错数组变量时,只能指定顶级数组的维度长度。下面的示例声明说明了一个 Byte 元素数组中的一个数组的有效和无效语法:
Dim JB(1)() As Byte ' Array of two arrays of Byte elements. Dim JB(1)(1) As Byte ' INVALID (can only specify top-level size). Dim JB(1)() As Byte = New Byte()() ' INVALID (New after lengths). Dim JB()() As Byte = {New Byte() {}, New Byte() {}} ' Empty arrays. Dim JB()() As Byte = {New Byte(1) {}, New Byte(1) {}} ' Default values. Dim JB()() As Byte = {New Byte() {5, 6}, New Byte() {7, 8}}
在上述最后一个声明中,JB
初始化为两个元素,即:JB(0)
和
JB(1)
,它们中的每一个又被初始化为两个元素的 Byte 数组,第一个的元素值为 5 和
6,第二个的元素值为 7 和 8。
数组大小的限制
数组每一维的长度受 Long 数据类型最大值 ((2 ^ 64) – 1)
的限制。数组的总大小受到操作系统和可用内存数量的制约。如果使用数组的大小超出了系统中可用 RAM 的数量,速度将变慢,因为数据必须在磁盘上进行交换。
注意 由于数组在 Visual
Basic .NET
中是对象,因此,区分数组对象和数组变量非常重要。数组对象创建之后就不再改变其大小和级别。然而,数组变量在其生存期内可以被分配多个不同的数组,且所分配数组可以是不同的大小和秩。
调整数组大小
通过使用 ReDim
或标准的赋值语句给数组变量赋以不同的数组对象,可以随时改变它的大小。虽然新数组对象必须保持相同的秩,但其维数可以不同。这样有助于您高效管理内存。例如,就可以在短时间内使用一个大型数组,然后通过
ReDim 使其变小。如此可以释放不再需要的内存。
当使用 ReDim 语句改变数组大小时,数组原有的值通常会丢失。但您可以在 ReDim 语句中使用 Preserve
关键字来保持这些值。例如,下面的语句分配一个新的数组,其元素由现有 MyArray
的相应元素初始化,然后将新数组分配给 MyArray
。
ReDim Preserve MyArray(10, 20)
在多维数组中,当您使用 Preserve
时只能更改数组的最后一维。如果要更改其他维,将会出现运行时错误。如果不知道某一维的当前大小,可以使用 GetUpperBound
方法,该方法返回指定维度的最大下标值。
在下面的示例中,第一行是有效的,而第二行无效,因为它试图更改二维中的第一维。
ReDim Preserve Matrix(Matrix.GetUpperBound(0), Matrix.GetUpperBound(1) + 10) ReDim Preserve Matrix(Matrix.GetUpperBound(0) + 10, Matrix.GetUpperBound(1))