Previous topicNext topic
Help > 开发指南 > 编程基础 > 数据处理 >
数组

Array数组是同一数据类型的一组变量的集合。

名称 类型 说明
Rank 只读属性 返回数组的维数。
Length 只读属性 返回数组中所有元素的总个数
GetLength 方法 返回数组中指定维数的元素个数。
GetLowerBound 方法 返回数组中指定维数的下限。
GetUpperBound 方法 返回数组中指定维数的上限。
Clone 方法 返回一个新创建数组,该数组是源数组的一个浅拷贝。
CopyTo 方法 将源数组中的元素拷贝到目的数组中。
Sort 静态方法 对数组元素进行排序,数组元素必须实现ICompare接口。
BinarySearch 静态方法 使用二分搜索法来搜索指定数组中的指定元素。该方法假定数组本身已经排好序。通常在调用BinarySearch前应首先调用Sort方法。
IndexOf 静态方法 返回某个值在数组中第一次出现的索引值。
LastIndexOf 静态方法 返回某个值在数组中最后一次出现的索引值。
Reverse 静态方法 反转数组全部或部分元素顺序。
Copy 静态方法 将一个数组中的部分元素拷贝到另一数组中,并根据需要进行适当转型。
CreateInstance 静态方法 创建一个数组实例,它允许我们动态定义拥有任何类型、任何维数、任何上下限的数组。

 Vb.Net
Dim arrColor(3) As String '声明一个4个元素的定长数组
'第一种赋值方式,根据下标逐个赋值
arrColor(0) = "黑色"
arrColor(1) = "白色"
arrColor(2) = "黄色"
arrColor(3) = "蓝色"

'第二种,定义类型并直接初始化
Dim Nums() As Integer={1,2,3,4}

'根据索引号遍历数组的每个元素
Proj.MsgDebug.Add("-------索引号遍历----------")
For i As Integer = 0 To arrColor.Length - 1
   Proj.MsgDebug.Add("arrColor({0})值为{1}",i,arrColor(i))
Next
'根据元素来遍历数组
Proj.MsgDebug.Add("-------元素来遍历----------")
For Each item As String In arrColor
    Proj.MsgDebug.Add(item)
Next

'二维数组
Dim arrCell(1, 2) As String '声明一个2行2列定长二维数组
'为第一行的各列赋值
arrCell(0, 0) = "A1"
arrCell(0, 1) = "A2"
arrCell(0, 2) = "A3"

'为第二行的各列赋值
arrCell(1, 0) = "B1"
arrCell(1, 1) = "B2"
arrCell(1, 2) = "B3"

'遍历所有数组
For i As Integer = 0 To arrCell.GetLength(0)-1 '行
   For j As Integer = 0 To arrCell.GetLength(1)-1 '列
       Proj.MsgDebug.Add("arrCell({0},{1})的值为:{2}",i,j,arrCell(i,j))
   Next
Next

'第二种,定义一个数组的数组类型并直接初始化数组,在本质上他还是一维数组,只是每个数据元素都是一个数组,实现另外意义上的二维
Dim arrCell2()() As String={New String(){"A1","A2","A3"},New String(){"B1","B2"},New String(){"C1","C2","C3","C4"}}
Proj.MsgDebug.Add("二维数组的维度:{0}",arrCell2.Rank)
For i As Integer = 0 To arrCell2.Length-1 '数组的个数
   For j As Integer = 0 To arrCell2(i).Length-1 '子数组的个数
       Proj.MsgDebug.Add("arrCell2({0})({1})的值为:{2}",i,j,arrCell2(i)(j))
   Next
Next

For Each arr As String() In arrCell2 '遍历子数组
    For Each item As String In arr '遍历子数组中的元素
        Proj.MsgDebug.Add(item)
    Next
Next

Dim arr3(2, 2, 3) As String '声明三维数组

'返回结果:-------索引号遍历----------
'返回结果:arrColor(0)值为黑色
'返回结果:arrColor(1)值为白色
'返回结果:arrColor(2)值为黄色
'返回结果:arrColor(3)值为蓝色
'返回结果:-------元素来遍历----------
'返回结果:黑色
'返回结果:白色
'返回结果:黄色
'返回结果:蓝色
'返回结果:arrCell(0,0)的值为:A1
'返回结果:arrCell(0,1)的值为:A2
'返回结果:arrCell(0,2)的值为:A3
'返回结果:arrCell(1,0)的值为:B1
'返回结果:arrCell(1,1)的值为:B2
'返回结果:arrCell(1,2)的值为:B3
'返回结果:二维数组的维度:1
'返回结果:arrCell2(0)(0)的值为:A1
'返回结果:arrCell2(0)(1)的值为:A2
'返回结果:arrCell2(0)(2)的值为:A3
'返回结果:arrCell2(1)(0)的值为:B1
'返回结果:arrCell2(1)(1)的值为:B2
'返回结果:arrCell2(2)(0)的值为:C1
'返回结果:arrCell2(2)(1)的值为:C2
'返回结果:arrCell2(2)(2)的值为:C3
'返回结果:arrCell2(2)(3)的值为:C4
'返回结果:A1
'返回结果:A2
'返回结果:A3
'返回结果:B1
'返回结果:B2
'返回结果:C1
'返回结果:C2
'返回结果:C3
'返回结果:C4

C#
string[] arrColor = new string[4]; // 声明一个4个元素的定长数组
// 第一种赋值方式,根据下标逐个赋值
arrColor[0] = "黑色";
arrColor[1] = "白色";
arrColor[2] = "黄色";
arrColor[3] = "蓝色";

// 第二种,定义类型并直接初始化
int[] Nums = new[] { 1, 2, 3, 4 };

// 根据索引号遍历数组的每个元素
Proj.MsgDebug.Add("-------索引号遍历----------");
for (int i = 0; i <= arrColor.Length - 1; i++)
    Proj.MsgDebug.Add("arrColor({0})值为{1}", i, arrColor[i]);
// 根据元素来遍历数组
Proj.MsgDebug.Add("-------元素来遍历----------");
foreach (string item in arrColor)
    Proj.MsgDebug.Add(item);

// 二维数组
string[,] arrCell = new string[2, 3]; // 声明一个2行2列定长二维数组
// 为第一行的各列赋值
arrCell[0, 0] = "A1";
arrCell[0, 1] = "A2";
arrCell[0, 2] = "A3";

// 为第二行的各列赋值
arrCell[1, 0] = "B1";
arrCell[1, 1] = "B2";
arrCell[1, 2] = "B3";

// 遍历所有数组
for (int i = 0; i <= arrCell.GetLength(0) - 1; i++) // 行
{
    for (int j = 0; j <= arrCell.GetLength(1) - 1; j++) // 列
    {
        Proj.MsgDebug.Add("arrCell({0},{1})的值为:{2}", i, j, arrCell[i, j]);
    }
}

// 第二种,定义一个数组的数组类型并直接初始化数组,在本质上他还是一维数组,只是每个数据元素都是一个数组,实现另外意义上的二维
string[][] arrCell2 = new[] { new string[] { "A1", "A2", "A3" }, new string[] { "B1", "B2" }, new string[] { "C1", "C2", "C3", "C4" } };
Proj.MsgDebug.Add("二维数组的维度:{0}", arrCell2.Rank);
for (int i = 0; i <= arrCell2.Length - 1; i++) // 数组的个数
{
    for (int j = 0; j <= arrCell2[i].Length - 1; j++) // 子数组的个数
    {
        Proj.MsgDebug.Add("arrCell2({0})({1})的值为:{2}", i, j, arrCell2[i][j]);
    }
}

foreach (string[] arr in arrCell2) // 遍历子数组
{
    foreach (string item in arr) // 遍历子数组中的元素
    {
        Proj.MsgDebug.Add(item);
    }
}

string[,,] arr3 = new string[3, 3, 4]; // 声明三维数组
    
//返回结果:-------索引号遍历----------
//返回结果:arrColor(0)值为黑色
//返回结果:arrColor(1)值为白色
//返回结果:arrColor(2)值为黄色
//返回结果:arrColor(3)值为蓝色
//返回结果:-------元素来遍历----------
//返回结果:黑色
//返回结果:白色
//返回结果:黄色
//返回结果:蓝色
//返回结果:arrCell(0,0)的值为:A1
//返回结果:arrCell(0,1)的值为:A2
//返回结果:arrCell(0,2)的值为:A3
//返回结果:arrCell(1,0)的值为:B1
//返回结果:arrCell(1,1)的值为:B2
//返回结果:arrCell(1,2)的值为:B3
//返回结果:二维数组的维度:1
//返回结果:arrCell2(0)(0)的值为:A1
//返回结果:arrCell2(0)(1)的值为:A2
//返回结果:arrCell2(0)(2)的值为:A3
//返回结果:arrCell2(1)(0)的值为:B1
//返回结果:arrCell2(1)(1)的值为:B2
//返回结果:arrCell2(2)(0)的值为:C1
//返回结果:arrCell2(2)(1)的值为:C2
//返回结果:arrCell2(2)(2)的值为:C3
//返回结果:arrCell2(2)(3)的值为:C4
//返回结果:A1
//返回结果:A2
//返回结果:A3
//返回结果:B1
//返回结果:B2
//返回结果:C1
//返回结果:C2
//返回结果:C3
//返回结果:C4

 

Vb.Net
'第二种,定义类型并直接初始化
Dim Nums() As Integer={2,6,3,4,3,0,-2}
'排序
Array.Sort(Nums)
Proj.MsgDebug.Add("-------排序后清单----------")
Proj.MsgDebug.Add(String.Join(",",Nums))

'反转
Array.Reverse(Nums)
Proj.MsgDebug.Add("-------反转后清单----------")
Proj.MsgDebug.Add(String.Join(",",Nums))

Proj.MsgDebug.Add("3在数组中的位置{0}",Array.IndexOf(Nums,3))
Proj.MsgDebug.Add("3在数组中最后的位置{0}",Array.LastIndexOf(Nums,3))
'在使用BinarySearch之前必须先排序
Array.Sort(Nums)
Proj.MsgDebug.Add("排序后的顺序:{0}",String.Join(",",Nums))
Proj.MsgDebug.Add("3在数组中的位置{0}",Array.BinarySearch(Nums,3))

'数组的浅拷贝
Dim arrCopy() As Integer=Nums.Clone()
'修改第一个数组值
arrCopy(0)=9
Proj.MsgDebug.Add("拷贝数组修改后原数组清单:" & String.Join(",",Nums))
Proj.MsgDebug.Add("拷贝数组修改后清单:" & String.Join(",",arrCopy))

Dim arrEmpty(12) As Integer
Nums.CopyTo(arrEmpty,3)
Proj.MsgDebug.Add("新数组清单:" & String.Join(",",arrEmpty))

'创建一个动态数组
Dim myIntArray As Array = Array.CreateInstance(GetType(System.Int32), 5)
'给动态数组赋值
For i As Integer = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
    myIntArray.SetValue(i + 1, i)
Next
'创建一个动态Object类型数组
Dim myObjArray As Array = Array.CreateInstance(GetType(System.Object), 5)
'给动态数组赋值
For i As Integer = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
    myObjArray.SetValue(i + 26, i)
Next
Proj.MsgDebug.Add("整数数组:" & String.Join(",",myIntArray.CType(Of Integer())))
Proj.MsgDebug.Add("Object数组:" & String.Join(",",myObjArray.CType(Of Object())))
'将整数数组拷贝到Object数组中,从整数数组的首位开始复制,在Object数组的首位开始存储,数据仅拷贝一位
Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1)
'将Object数组中最后2位数据,拷贝到整数数组的最后2位
Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2)
Proj.MsgDebug.Add("修改后整数数组:" & String.Join(",",myIntArray.CType(Of Integer())))
Proj.MsgDebug.Add("修改后Object数组:" & String.Join(",",myObjArray.CType(Of Object())))

'二维数组
Dim arrCell(1, 2) As String '声明一个2行2列定长二维数组
'为第一行的各列赋值
arrCell(0, 0) = "A1"
arrCell(0, 1) = "A2"
arrCell(0, 2) = "A3"

'为第二行的各列赋值
arrCell(1, 0) = "B1"
arrCell(1, 1) = "B2"
arrCell(1, 2) = "B3"

'遍历所有数组
For i As Integer = arrCell.GetLowerBound(0) To arrCell.GetUpperBound(0) '行,注意GetLength的使用区别
    For j As Integer = arrCell.GetLowerBound(1) To arrCell.GetUpperBound(1) '列
        Proj.MsgDebug.Add("arrCell({0},{1})的值为:{2}",i,j,arrCell(i,j))
    Next
Next

'返回结果:-------排序后清单----------
'返回结果:-2,0,2,3,3,4,6
'返回结果:-------反转后清单----------
'返回结果:6,4,3,3,2,0,-2
'返回结果:3在数组中的位置2
'返回结果:3在数组中最后的位置3
'返回结果:排序后的顺序:-2,0,2,3,3,4,6
'返回结果:3在数组中的位置3
'返回结果:拷贝数组修改后原数组清单:-2,0,2,3,3,4,6
'返回结果:拷贝数组修改后清单:9,0,2,3,3,4,6
'返回结果:新数组清单:0,0,0,-2,0,2,3,3,4,6,0,0,0
'返回结果:整数数组:1,2,3,4,5
'返回结果:Object数组:26,27,28,29,30
'返回结果:修改后整数数组:1,2,3,29,30
'返回结果:修改后Object数组:1,27,28,29,30
'返回结果:arrCell(0,0)的值为:A1
'返回结果:arrCell(0,1)的值为:A2
'返回结果:arrCell(0,2)的值为:A3
'返回结果:arrCell(1,0)的值为:B1
'返回结果:arrCell(1,1)的值为:B2
'返回结果:arrCell(1,2)的值为:B3

C#
// 第二种,定义类型并直接初始化
int[] Nums = new[] { 2, 6, 3, 4, 3, 0, -2 };
// 排序
Array.Sort(Nums);
Proj.MsgDebug.Add("-------排序后清单----------");
Proj.MsgDebug.Add(string.Join(",", Nums));

// 反转
Array.Reverse(Nums);
Proj.MsgDebug.Add("-------反转后清单----------");
Proj.MsgDebug.Add(string.Join(",", Nums));

Proj.MsgDebug.Add("3在数组中的位置{0}", Array.IndexOf(Nums, 3));
Proj.MsgDebug.Add("3在数组中最后的位置{0}", Array.LastIndexOf(Nums, 3));
// 在使用BinarySearch之前必须先排序
Array.Sort(Nums);
Proj.MsgDebug.Add("排序后的顺序:{0}", string.Join(",", Nums));
Proj.MsgDebug.Add("3在数组中的位置{0}", Array.BinarySearch(Nums, 3));

// 数组的浅拷贝
int[] arrCopy = Nums.Clone().CType<int[]>();
// 修改第一个数组值
arrCopy[0] = 9;
Proj.MsgDebug.Add("拷贝数组修改后原数组清单:" + string.Join(",", Nums));
Proj.MsgDebug.Add("拷贝数组修改后清单:" + string.Join(",", arrCopy));

int[] arrEmpty = new int[13];
Nums.CopyTo(arrEmpty, 3);
Proj.MsgDebug.Add("新数组清单:" + string.Join(",", arrEmpty));

// 创建一个动态数组
Array myIntArray = Array.CreateInstance(typeof(System.Int32), 5);
// 给动态数组赋值
for (int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++)
    myIntArray.SetValue(i + 1, i);
// 创建一个动态Object类型数组
Array myObjArray = Array.CreateInstance(typeof(System.Object), 5);
// 给动态数组赋值
for (int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++)
    myObjArray.SetValue(i + 26, i);
Proj.MsgDebug.Add("整数数组:" + string.Join(",", myIntArray.CType<int[]>()));
Proj.MsgDebug.Add("Object数组:" + string.Join(",", myObjArray.CType<object[]>()));
// 将整数数组拷贝到Object数组中,从整数数组的首位开始复制,在Object数组的首位开始存储,数据仅拷贝一位
Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1);
// 将Object数组中最后2位数据,拷贝到整数数组的最后2位
Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2);
Proj.MsgDebug.Add("修改后整数数组:" + string.Join(",", myIntArray.CType<int[]>()));
Proj.MsgDebug.Add("修改后Object数组:" + string.Join(",", myObjArray.CType<object[]>()));

// 二维数组
string[,] arrCell = new string[2, 3]; // 声明一个2行2列定长二维数组
// 为第一行的各列赋值
arrCell[0, 0] = "A1";
arrCell[0, 1] = "A2";
arrCell[0, 2] = "A3";

// 为第二行的各列赋值
arrCell[1, 0] = "B1";
arrCell[1, 1] = "B2";
arrCell[1, 2] = "B3";

// 遍历所有数组
for (int i = arrCell.GetLowerBound(0); i <= arrCell.GetUpperBound(0); i++) // 行,注意GetLength的使用区别
{
    for (int j = arrCell.GetLowerBound(1); j <= arrCell.GetUpperBound(1); j++) // 列
    {
        Proj.MsgDebug.Add("arrCell({0},{1})的值为:{2}", i, j, arrCell[i, j]);
    }
}

//返回结果:-------排序后清单----------
//返回结果:-2,0,2,3,3,4,6
//返回结果:-------反转后清单----------
//返回结果:6,4,3,3,2,0,-2
//返回结果:3在数组中的位置2
//返回结果:3在数组中最后的位置3
//返回结果:排序后的顺序:-2,0,2,3,3,4,6
//返回结果:3在数组中的位置3
//返回结果:拷贝数组修改后原数组清单:-2,0,2,3,3,4,6
//返回结果:拷贝数组修改后清单:9,0,2,3,3,4,6
//返回结果:新数组清单:0,0,0,-2,0,2,3,3,4,6,0,0,0
//返回结果:整数数组:1,2,3,4,5
//返回结果:Object数组:26,27,28,29,30
//返回结果:修改后整数数组:1,2,3,29,30
//返回结果:修改后Object数组:1,27,28,29,30
//返回结果:arrCell(0,0)的值为:A1
//返回结果:arrCell(0,1)的值为:A2
//返回结果:arrCell(0,2)的值为:A3
//返回结果:arrCell(1,0)的值为:B1
//返回结果:arrCell(1,1)的值为:B2
//返回结果:arrCell(1,2)的值为:B3