数组是用于储存多个相同类型数据的集合。
C#中的数组有:简单数组,多维数组和锯齿数组,本文主要介绍C#中的数组以及Array类。
数组是一种数据结构,它可以包含同一种数据类型的多个元素。
先定义数组中元素的数据类型,其后是[]和变量名,例如:
int[] intArray; //声明一个整形一维数组
声明数组后,就必须为数组分配内存。数组是引用数据类型,故必须为它分配堆上的内存。为此,应使用new运算符。例如:
intArray = new int[4]; //分配了能存储4个int数据类型的内存空间(托管堆)
int[] intArray = new int[4];
2.可以用数组初始化器为数组每个元素赋初值:
int[] intArray = new int[4] {1,2,3,4};
3.使用数组初始化器为数组每个元素赋初值时,可以不指定数组大小,因为编译器会自动统计元素个数:
int[] intArray = new int[] {1,2,3,4};
4.使用C#编译器还可以有更简化的形式,使用花括号可以同时声明和初始化数组:
int[] intArray = {1,2,3,4};
素组只支持有整形元素的索引器,通过索引器传递元素编号访问数组元素。索引器总是以0开头,表示第一个元素。例:
int[] intArray = {1,2,3,4};
int n1 = intArray[0]; //n1 = 1;
int n2 = intArray[1]; //n2 = 2;
intArray[2] = 7; // 将intArray数组的第三个元素赋值为7
如果使用的索引器值(大于数组的长度),会抛出IndexOutOfRangeException类型的异常
1.使用for循环遍历数组
for(int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
2.使用foreach遍历数组
foreach(var item in intArray)
{
Console.WriteLine(item);
}
定义一个Person类,里面包含FirstName和LastName两个属性。
public class Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
新建Person的数组:
Person[] person = new Person[2];
注:如果数组中的元素是引用数据类型,就必须为每个元素分配内存;如果使用 了数组中未分配内存的元素,或抛出NullReferenceException类型的异常。
为Person数组元素分配内存:
person[0] = new Person("San", "Zhang");
person[1] = new Person("Si", "Li");
int[,] twodim = new int[3, 3];
twodim[0, 0] = 1;
twodim[0, 1] = 2;
twodim[0, 2] = 3;
twodim[1, 0] = 4;
twodim[1, 1] = 5;
twodim[1, 2] = 6;
twodim[2, 0] = 7;
twodim[2, 1] = 8;
twodim[2, 2] = 9;
注:声明数组后,就不能修改其阶数了
也可用如下的方式进行初始化二维数组:
int[,] twodim = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
注:使用数组初始化器是必须对每个元素进行初始化,不能把某些元素的初始化放在以后完成。
int[][] jagged = new int[3][];
jagged[0] = new int[1] { 1 };
jagged[1] = new int[2] { 1, 0 };
jagged[2] = new int[3] { 1, 1, 1 };
int i = 0;
foreach (var item in jagged)
{
int j = 0;
foreach (var element in item)
{
Console.WriteLine($"row: {i},column: {j},value: {element}");
++j;
}
++i;
}
输出结果:
row: 0,column: 0,value: 1
row: 1,column: 0,value: 1
row: 1,column: 1,value: 0
row: 2,column: 0,value: 1
row: 2,column: 1,value: 1
row: 2,column: 2,value: 1