c#笔记8(数组)

1、数组

数组实际是由一个变量名称表示的一组相同类型的数据元素。每个元素由数组名【索引】的方式访问。

c#中数组的特性:

1、数组一经创建,长度固定不变

2、索引号从0开始

多维数组有两种类型:矩形数组、交错数组

矩形数组:每个维度的子数组具有相同的维度长度,不管有多少维度,总是使用一个方括号表示

int x = myArray[4,6,1];    //myArray是三维数组

交错数组:每个子数组都是独立数组的多维数组,可以有不同长度的子数组,为每个维度使用一组方括号。

jagArray[2][7][4]

数组实例是system.Array继承类型的对象,从BCL基类中派生,继承了许多成员:

Rank:返回数组维度数的属性;

Length:返回数组长度的属性;

数组是引用类型

 数组元素可以是值类型,也可以是引用类型。

一维数组和矩形数组的声明:

int[,,] firstArray;

逗号为秩说明符,数组声明时确定数组的维度,不再改变,声明时不能放数组维度长度,秩是数组类型的一部分,而维度长度不是类型的一部分。维度长度直到实例化的时候才能确定。

实例化:

int[] secondArray = new int[4];

使用数组创建表达式,new运算符,基类名称+【维度长度】;

MyClass mcArr = new MyClass[4];

mcArr是一个包含4个MyClass类型引用的一维数组。

矩形数组:  int[,,] arr1 = new int[3,6,2];

显示初始化数组:不必输入数组长度,编译器会通过初始化值的个数推断出长度。

int[] intArr = new int[]{10,20,30,40};

 显示初始化矩形数组:每一个初始值向量必须封闭在大括号内,每一个维度也必须嵌套并封闭在大括号内

int[,] intArr2 = new int[,]{{10,1},{2,10},{11,9}};

 快捷语法:

隐式类型数组:

交错数组:交错数组是数组的数组,交错数组的子数组的元素个数可以不同。

int[][] jagArr = new int[3][];

 jagArr是3个int数组的数组        ,不能在声明语句中初始化顶层数组之外的数组

交错数组的声明:要求每个维度都有自己方括号int[][] SomeArr ; 

实例化:交错数组的初始化不能在一个步骤完成,由于交错数组是独立的数组的数组,所以每个数组必须独立创建,应该先实例化顶层数组,之后再分别实例化每一个子数组,把新建数组的引用赋给所属数组的对应元素。

int[][] Arr = new int[3][];  //1、实例化顶层数组

int[0] = new int[]{10,20,30};   //2、实例化子数组

int[1] = new int[]{40,50,60,70};

int[2] = new int[]{80,90,100,110,120};

交错数组的子数组也是数组,所以子数组也可以是矩形数组

int[][.] Arr = new int[3][,];

Arr是有3个二维数组的交错数组

Arr[0] = new int[]{{10,20}.,

                           {100,200}};

Arr[1] = new int[]{{30,40,50}.,

                           {300,400,500}};

Arr[2] = new int[]{{60,70,80,90}.,

                           {600,700,800,900}};

 foreach语句:实现循环遍历数组元素

 

迭代变量是只读的,所以不能改变,对于值类型数组和引用类型数组效果不一样,因为对于引用类型数组来说,迭代变量保存的是引用,对于值类型的数组,通过迭代变量改变数组元素会出现编译错误。

 对于引用类型数组,可以通过迭代变量改变数据。

在多维数组中,元素的处理次序是最右边的索引号先从0开始递增,然后是递增他左边的索引号

比如:

int[.] arr1 = {{10,11},

                    {12,13}};

foreach(var item in arr1)

{Console.WriteLine("{item}");}

处理顺序是arr1[0,0]->arr1[0,1]->arr1[1,0]->arr1[1,1]

交错数组是数组的数组,所以必须为交错数组的每一个维度使用独立的foreach语句

 

数组协变:在某些情况下,即便某个对象不是数组的基类型,也可以把它赋值给数组元素。

需要满足的条件:数组是引用类型数组、在赋值的对象类型 和数组基类型之间有隐式转换或显式转换,比如用派生类对象赋值给基类型数组元素。

 

Clone方法:

Clone方法为数组进行浅复制,如果是引用类型数组,不会复制元素引用的对象。克隆值类型数组会产生两个独立的数组。克隆引用类型数组会产生指向相同对象的两个数组。

克隆值类型数组:

 克隆引用类型数组:

示例代码: 

 

ref在数组中的常见用途:把数组的一个元素的引用传递回调用域,利用ref返回功能,可以把一个引用作为返回值传到方法体外,而利用ref局部变量,可以在调用域内使用这个引用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值