数组是引用类型
作用:数组使用复合数据类型,可以通过数组来存储批量数据。
在创建数组时要明确数组能容纳数据的大小,在后续的操作过程中不可以缩减数据或扩增数组。
//声明可以容纳5个整型数据值的数组
int[] array00 = new int[5];
//更改引用变量array00的指向,使其指向空
array00 = null;
//更改引用变量array00的指向
array00 = new int[2];
//通过引用变量对另一个引用变量赋值或初始化,两个引用变量指向同一个对象
int[] array = array00;
一维数组
声明创建样式:数据类型[] 数组名称 = new 数据类型 [数据个数]
元素:数组对象由连续的要存放的底层数据类型的数据项组成,每个数据项称之为元素。
元素的表示方式:从第一个元素开始,通过下标0~元素个数-1来依次表示。
表示样式:数组名称[下标] 也称索引。下标的范围必须大于等于0且小于元素总数,不可以越界。
系统会对数组对象中的元素做默认初始化处理,初始化为默认值。
引用类型默认值为null,整型默认值为0,浮点类型默认值为0.0,布尔类型默认值为false。
//当前数组由三个int类型的元素组成,分别是array01[0]、array01[1]、array01[2]
int[] array01 = new int[3];
//除了字符串之外,直接打印引用变量打印出的不是对象包含的数据,而是引用变量指向的对象类型
Console.WriteLine(array01);
//访问数组存储的具体数据,要通过指定元素进行访问
Console.WriteLine(array01[2]);
//在对象创建后面跟随{},{}中是各个对应元素的数据,按照顺序依次对各个元素做初始化操作
//数据个数必须等同于元素个数,数据之间通过逗号隔开
bool[] array02 = new bool[4] { true, true, false, true };
Console.WriteLine(array02[3]);
//在数组对象显式初始化并且声明引用变量的同时,可以省略创建数组的new表达式
float[] array03 = { 9.4f, 3.5f, 1.2f};
//等价于 float[] array03 = new float[3] { 9.4f, 3.5f, 1.2f};
Console.WriteLine(array03[1]);
//在数组对象显式初始化时,可以省略数组元素个数
array03 = new float[]{ 4.3f};
//不能直接对整个数组赋值,给数组赋值要通过对指定的元素赋值
array03[0] = 1.8f;
Console.WriteLine(array03[0]);
float[] array04 = { 6.7f, 3, 8.2f};
//把=右侧引用变量中存放的对象引用赋值给左侧的引用变量,两个引用变量指向同一个对象
array03 = array04;
//遍历数组:
//元素有下标,下标有规律和范围(0~元素个数-1)
//可以通过系统提供的函数来获取数组元素长度:数组名称.Length; 返回int类型数据
int count = array03.Length;
Console.WriteLine(count);
//第一种遍历方式:for、while循环
for (int i = 0; i < array03.Length; i++)
{
Console.Write(array03[i] + " "); //使用迭代变量表示元素下标
}
第二种遍历方式:foreach
- 样式:
* foreach(元素类型 迭代变量名称 in 要遍历的集合类型对象名称)
* {
* 方法体
* } - foreach语句在遍历完整个集合对象之后会自动终止
- 无法获取明确的元素变量,只能通过迭代变量接收对应元素的数据值,因此foreach遍历无法修改元素
- foreach语句中的迭代变量不可以修改
foreach (float element in array04)
{
Console.Write(element + " ");
}
二、二维数组
作用:用来存储表示行列对其的矩阵数据
二维数组的元素是不可直接访问操作的一维数组:
普通多维数组的元素就是对应降一维的数组, 但是不支持访问操作它包含的数组,只能获取处理最底层的数据项元素。维度:几位数组,维度就是几。在C#中的表示形式:[]中通过分为几块空间就是几维
维度长度:各个维度有对应的长度表示当前维度的元素个数。多维数组,[]中从高到低为多维到低维,分别对应具体的元素长度。
数组长度:各个维度的维度长度的乘积。底层数据项的总数
二维数组样式:
最底层的数据项类型[,] 数组名称 = new 最底层的数据项类型[二维维度长度, 一维维度长度];系统在数组没有明确初始化时,会默认为其做初始化操作。初始化为最底层数据项的默认值
二维数组的底层元素表示:
数组名[二维数组的元素下标 i, 包含的一维数组的元素下标 j ]
i 范围:0~二维维度长度-1
j范围 : 0~一维维度长度-1
//一个拥有3个元素的二维数组,每个元素是元素个数为5的一维数组
int[,] array = new int[3, 5]; //3是二维维度长度,5是一维维度长度
Console.WriteLine(array[0, 3]);
//二维数组显式初始化:依次对最底层的元素做初始化处理
int[,] array00 = new int[3, 5] { { 12, 8, - 9, 0, 3 }, { -5, 7, 10, 34, 89 }, { 67, 2, 3, 6, 19 } };
Console.WriteLine(array00[1,1]);
//可以在显式初始化二维数组和声明引用变量的同时,省略new表达式,系统会自动创建对应的二维数组
int[,] array01 = { { 1, 2, 3}, { 5, 6, 7} }; //new int[2, 3];
//在显式初始化二维数组的同时,可以省略创建数组时的各维度长度,若要省略,各维度长度必须全部省略
array01 = new int[,] { { 1}, { 2}, { 3} }; //new int[3, 1];
//赋值:给多维数组赋值,要通过给最底层的一维数组的元素赋值
array01[1, 0] = 8;
Console.WriteLine(array01[1, 0]);
获取维度长度的函数:数组名称.GetLength(指定维度下标),返回整型数据值
指定维度下标通过0~维度数-1 从高维到低维是从0~维度数-1
二维数组:二维用0表示,一维用1表示
遍历方式:
//第一种:for、while
//外层是二维维度下标:行
for (int i = 0; i < array00.GetLength(0); i++)
{
//内层是一维维度下标:列
for (int j = 0; j < array00.GetLength(1); j++)
{
Console.Write(array00[i, j] + " ");
}
Console.WriteLine();
}
//第二种:foreach
//foreach拿不到中间层级的数据,而是直接获取到最底层的元素,所以只需一层
foreach (int element in array01)
{
Console.WriteLine(element);
}
三、锯齿数组
锯齿数组是一维数组,锯齿数组的元素是引用类型,元素存储的数据是长度相同或不同的数组对象引用。
锯齿数组的样式:由单独的任意多个[]排列组成
在锯齿数组没有显式初始化时,系统会为其做默认初始化处理。引用类型的默认值为null。
创建数组对象时,第一个[]中是锯齿数组的元素个数。第二个[]中不可以给值,因为锯齿数组元素可以是数组长度不同的数组对象,因此不可以限定长度。
获取锯齿数组元素:数组名称[下标] 锯齿数组可以通过[]的排列组合获取其下各级的数据
//声明创建元素为int[]类型的具备两个元素的锯齿数组
int[][] array = new int[2][];
Console.WriteLine(array[0]);
int[][] array01 = new int[2][] { new int[3]{ 1, 2, 3}, new int[2]{ 4, 5} };
Console.WriteLine(array01[0]);
int[] arr00 = array01[0]; //获取锯齿数组的第一个元素
//通过组合形式,获取底层数据项
int num1 = array01[1][1];
Console.WriteLine(num1);
//可以通过[]组合的方式对各层级元素进行赋值操作
array01[0] = new int[3]; //使用新的数组对象对锯齿数组的第一个元素赋值
Console.WriteLine(array01[0][0]);
array01[1][1] = 10; //给锯齿数组的第二个元素包含的第二个元素赋值
Console.WriteLine(array01[1][1]);
//遍历锯齿数组
//for\while循环
//锯齿数组是一维数组,一维数组的数组长度等同于维度长度
for (int i = 0; i < array01.Length; i++)
{
//获取对应的子数组,进行遍历
int[] sArray = array01[i];
for (int j = 0; j < sArray.Length; j++)
{
Console.Write(array01[i][j] + " " );
}
Console.WriteLine();
}
//foreach
//获取锯齿数组中的一维数组锯齿元素
foreach (int[] obj in array01)
{
//获取一维数组中的元素
foreach (int element in obj)
{
Console.Write(element + " ");
}
Console.WriteLine();
}