C#数组和Array类

C#数组和Array类

数组是用于储存多个相同类型数据的集合。

C#中的数组有:简单数组,多维数组和锯齿数组,本文主要介绍C#中的数组以及Array类。

C#中的数组

简单数组

数组是一种数据结构,它可以包含同一种数据类型的多个元素。

声明数组

先定义数组中元素的数据类型,其后是[]和变量名,例如:

int[] intArray; 	//声明一个整形一维数组

初始化数组

声明数组后,就必须为数组分配内存。数组是引用数据类型,故必须为它分配堆上的内存。为此,应使用new运算符。例如:

intArray = new int[4];		//分配了能存储4个int数据类型的内存空间(托管堆)

内存分配如下图:
C#数组和Array类_第1张图片
注:
1.可以在声明数据的同时初始化:

int[] intArray = new int[4];

2.可以用数组初始化器为数组每个元素赋初值:

int[] intArray = new int[4] {1234};

3.使用数组初始化器为数组每个元素赋初值时,可以不指定数组大小,因为编译器会自动统计元素个数:


int[] intArray = new int[] {1234};

4.使用C#编译器还可以有更简化的形式,使用花括号可以同时声明和初始化数组:

int[] intArray = {1234};

访问数组元素

素组只支持有整形元素的索引器,通过索引器传递元素编号访问数组元素。索引器总是以0开头,表示第一个元素。例:

int[] intArray = {1234};
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");

Person数组中的对象在托管堆中的情况:
C#数组和Array类_第2张图片

多维数组

如图二维数组的数学表示法:
C#数组和Array类_第3张图片
在C#声明这个二维数组:

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}
};

注:使用数组初始化器是必须对每个元素进行初始化,不能把某些元素的初始化放在以后完成。

锯齿数组

锯齿数组和二维数组比较

  1. 二维数组的大小类似于矩形
  2. 矩形数组的大小比较灵活,每行可以有不同的大小

锯齿数组声明及初始化

 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 = 0foreach (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

你可能感兴趣的:(C#,C#,数组)