一维数组
同一变量类型的数据集合,所有的变量类型都可以申明为数组
申明数组
//先申明,后面需要实例化
int[] arr1;
int[] arr2 = new int[5];
//下列三种都可以直接实例化,{}中不填值就为空
int[] arr3 = new int[5]{1, 2, 3, 4, 5};
int[] arr4 = new int[]{1, 2, 3, 4, 5};
int[] arr5 = {1, 2, 3, 4, 5};
bool[] arr6 = {true, true}; //后面的项必须要符合[]前定义的类型
返回数值等于数组长度:array.Length
查找对应下标的元素(数组的索引/下标从0开始,等差递增数列,差值为1):array[<index>]
修改数组元素:array[<index>] = 要赋予的值;
int[] array = {0,1,2};
Console.WriteLine(array.Length);
Console.WriteLine(array[0]);
array[0] = 99;
Console.WriteLine(array[0]);
//output
//3
//0
//99
通过for语句遍历数组,快速获取数组中每一个元素的值
for(int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
增加/删除数组的元素:因为数组被创建时就锁定了内存空间大小,所以要搬家
int[] array = {0,1,2};
//增加元素
int array2 = new int[5];
for(int i = 0; i < array.Length; i++)
{
array2[i] = array[i];
}
array = array2; //实际上是让array用array2的内存地址
//多出来的两位为0
//array = array2 = {0, 1, 2, 0, 0}
//减少元素
int array3 = new int[2];
for(int i = 0; i < array3.Length; i++)
{
array3[i] = array[i];
}
array = array3;
查找数组中的元素对应的索引位置/下标:用for+if语句
//找元素2的索引位置/下标
int[] array = {0, 1, 2};
for(int i = 0; i < array.Length; i++)
{
if(array[i] == 2)
{
Console.WriteLine("元素2的索引位置是{0}", i);
}
}
二维数组
二维数组是使用两个下标(索引)来确定元素的数组,”两个下标“可以理解为行标和列标
二维数组如何存储数据:二维数据有 i 行 j 列,第 0 行的 j 个变量先存储,接着是第 1 行的 j 个变量……一直到第 i 行,e.g. 2 行 4 列数组[2, 4]对应存储顺序的元素下标为[0,0] [0,1] [0,2] [0,3] [1,0] [1,1] [1,2] [1,3]
申明二维数组
int[,] arr1;
int[,] arr2 = new int[2,3]; //二行三列数组
int[,] arr3 = new int[2,3]{{0, 1, 2}, {3, 4, 5}}; //和下面一样实例化比较直观
int[,] arr4 = new int[,]{{0, 1, 2},
{3, 4, 5}};
int[,] arr5 = {{0, 1, 2},
{3, 4, 5}};
获取二维数组的长度及元素,注意元素的下标从0开始计数(行和列都是),如果越界会报错System.IndexOutOfRangeReception:
int[,] array = {{1, 2, 3},
{4, 5, 6}};
//得到行数
Console.WriteLine(array.GetLength(0));
//得到列数
Console.WriteLine(array.GetLength(1));
//获取元素
Console.WriteLine(array[0, 1]);
Console.WriteLine(array[1, 2]);
//output
//2
//3
//2
//6
修改元素
array[0, 1] = 99;
遍历二维数组,用两层for循环
for(int i = 0; i < array.GetLength(0); i ++)
{
for(int j = 0; j < array.GetLength(1); j ++)
{
Console.WriteLine(array[i, j]);
}
}
//output
//1
//99 //上面改过了
//3
//4
//5
//6
增加/删除数组的元素:申明并初始化数组后,就不能增加/减少元素了,同样要使用搬家
int[,] array2 = new int [3, 3]
for(int i = 0; i < array.GetLength(0); i ++)
{
for(int j = 0; j < array.GetLength(1); j ++)
{
array2[i, j] = array[i, j]);
}
}
array = array2; //实际上是让array用array2的内存地址
//增加的一行要一个一个更改
array[2, 0] = 7;
array[2, 1] = 8;
array[2, 2] = 9;
查找元素所在位置:同一维数组,使用两层for语句遍历
交错数组
数组的数组,每个维度的数量可以不同,二维数组的每行列数相同,交错数组每行的列数可能不同
申明数组
int[][] arr1;
//变量类型 [][] 交错数组名 = new 变量类型[行数][];
int[][] arr2 = new int[3][]; //行数可以写,列不能写会报错
//变量类型 [][] 交错数组名 = new 变量类型[行数][]{一维数组1, 一维数组2, ……};
int[][] arr3 = new int[3][]{new int[]{1,2,3},
new int[]{1,2},
new int[]{1}};
//变量类型 [][] 交错数组名 = {一维数组1, 一维数组2, ……};
int[][] arr4 = {new int[]{1,2,3},
new int[]{1,2},
new int[]{1}};
获取长度,获取元素,修改元素
int[][] array = {new int[]{1, 2, 3},
new int[]{4, 5}};
//获取行数
Console.WriteLine(array.GetLength(0));
//获得某一行的列数
Console.WriteLine(array[0].Length);
Console.WriteLine(array[1].Length);
//获得交错数组中的元素,注意不要越界
Console.WriteLine(array[0][1]);
//修改元素
array[0][1] = 99;
Console.WriteLine(array[0][1]);
//output
//2
//3
//2
//2
//99
遍历交错数组
for(int i = 0; i < array.GetLength(0); i ++)
{
for(int j = 0; j < array[i].Length; j ++)
{
Console.Write(array[i][j]+" "); //在控制台的一行内打出数组某行的所有元素,中间空一格
}
Console.WriteLine();
}
增删查同上方法