@作者: 风不停息丶
一、什么是数组
从Array类派生的,一组数据类型相同的变量组合。一种空间连续的数据结构。
元素通过索引(位置的序号)进行操作。
定义数组语法:
声明数组
数据类型[] 数组名;
初始化数组
数组名 = new 数据类型[元素总数];
初始化的元素类型与声明时的类型必须相同。
例:
int[] array01 =new int[5];
string[] array02 =new string[3];
二、初始化数组
数组初始化后,内存中存储该数据类型的默认值。
– 整形为0
– 非整形为0.0
– char为\0
– string为 null
– bool为 false
- 初始化+赋值
- 可以在数组初始化的同时对元素进行赋值。
int[] array01 = new int[]{ 1,2,3,4,5 };
string[] array02 = new string[{"a","b","c"};
//初始化时[]内也可以填入数组长度,但必须与所赋值的元素总数一致。
double[] array03 = new double[2]{ 1.0,2.0 };
- 声明+赋值
- 程序员可以省略初始化,但编译器内部仍然会"new 数据类型[]”。
int[] array01 = {1,2,3,4,5 };//元素个数即为数组长度。
三、访问数组元素
- 1、可以通过数组的索引(位置的序号)进行读写操作。
stringl array = new string[] {"a", "b","c"};
Console.WriteLine(array[0]); //获取数组第一个元素
Console.WriteLine(array[2]); //获取数组第三个元素
- 2、可以通过 for 遍历、按照某种顺序访问每一个元素。
string[] array = new stringll{ "a"."b","c" };
//正序输出到控制台中:
for (int i = O; i < array.Length; i++)
{
Console.WriteLine( array[i]);
}
//倒序输出到控制台中:
for (int i = array.Length - 1; i >= O; i--)
{
Console.WriteLine( array[i]);
}
- 3、通过foreach 遍历.、foreach是一种更简单更明了的读取数组元素的语句。
局限性:
1、只能读取全部元素(语句本身)–不能修改元素
2、只能遍历实现Ienumerable接口的集合对象语法
string[] array = new string[]{ "a"."b"."c" };
foreach (string item in array)
{
Console.WriteLine( item);
}
四、数组中常用的方法及属性
常用的方法及属性 | 语法 |
---|---|
数组长度 | 数组名.Length |
清除元素值 | Array.Clear |
复制元素 | Array.copy / 数组名.CopyTo |
查找元素 | Array.IndexOf / Array.LastIndexOf |
排序 | Array.Sort |
反转 | Array.Reverse |
五、数组的种类
1、一维数组
一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。
创建一维数组的语法形式如下:
//定义数组
数据类型[] 数组名;
//初始化数组中的元素
数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = {值 1, 值 2, …}
数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,…}
//定义 int 类型的数组
int[] a = {1,2,3};
//输岀数组中的一个元素
Console.WriteLine(a[0]);
//输出数组中的最后一个元素
Console.WriteLine(a[a.Length-1]);
2、多维数组
具有两个或多个索引的数组。
语法:
声明+初始化
数据类型[,] 数组名= new 数据类型[行数,列数];
例:string[] array01 = new string[3,2];
–初始化+赋值
数组名 = new数据类型[,] {元素1,元素2},{元素3,元素4}};
例:int[] array02 = new int[]{ {1,2}.{3,4} };
- 实例:for循环遍历数组元素,以表格形式输出到控制台中
int[] array = new int[,]{ {1,2},{3,4} };
// array.GetLength(O)获取行数
for (int r = 0; r < array.GetLength(O); r++)
{
//array.GetLength(1)获取列数
for (int c = O; c < array.GetLength(1); c++)
{
Console.Write( array[r. c] +"\t");
}
Console.WriteLine();//换行
}
3、交错数组
元素为数组的数组,每个元素都是一个新的一位数组。
语法:
----定义
数据类型[][] 数组名 = new 数据类型[元素总数][];
string[][] array = new string[3][];
----赋值
数组名[索引] = new 数据类型[子元素数];
array[0] = new string[2];
----读写元素
数组名[元素索引][子元素索引]
- 实例:输入学生数量,再针对每一位学生输入多少门科目(科目数量不相同),然后输入分数打印
private static void StudentSubjectScores()
{
//获取学生数量和科目数量
Console.WriteLine("请输入学生数量:");
int student = int.Parse(Console.ReadLine());
int[][] array = new int[student][];
for (int i = 0; i < student; i++)
{
Console.WriteLine("请输入第{0}位学生的科目数量", i + 1);
array[i] = new int[int.Parse(Console.ReadLine())];
}
//输入成绩
for (int r = 0; r < array.Length; r++)
{
for (int c = 0; c < array[r].Length; c++)
{
Console.WriteLine("请输入第{0}位学生的第{1}门成绩", r + 1, c + 1);
array[r][c] = int.Parse(Console.ReadLine());
}
}
//打印成绩
for (int r = 0; r < array.Length; r++)
{
for (int c = 0; c < array[r].Length; c++)
{
Console.Write(array[r][c]);
}
Console.WriteLine();
}
}
4、参数数组
在方法形参中通过关键字params定义。
方法调用者可以传递数组,也可以传递一组数据类型相同的变量,甚至可以不传递参数。
注意:参数数组必须在形参列表中的最后一位。只能在一维数组上使用params关键字。
WriteLine中使用占位符,就是通过参数数组实现的。
- 实例:
private static int Add( params int[] array )
{
int sum = 0;
foreach (int item in array)//历遍数组里的每一个数
{
sum += item;//使每个数相加
}
return sum;
}