C#数组和Array类

C#数组和Array类

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

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

C#中的数组

简单数组

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

声明数组

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

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

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

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

内存分配如下图:
简单数组内存图
注:
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#声明这个二维数组:

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
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值