轻松学C#之数组

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6章数组在C#中,数组是一种常用的工具,它能在一个集合中存储多个对象。我们在这一章将给大家介绍什么是数组以及如何使用数组,特别是一维数组、多维数组和交错数组。6.1初识数组在生活中我们见到过这样的情景:图书馆中藏有上亿本书,但是要找出我们需要的一本时并不难。这是因为图书馆的所有书都已经编号放在相应的书架上了。书架是分类存储的,它有如下特点:1.分类存放,易于查找。2.书架的格子提供了存储空间。3.物品进行了分类,每一类都有名字。4.每本书都有位置编号。这种方式可以有效大量地存储书籍,同样的办法可以用到C#中,存储一组需要一起处理的数据。文学类《茶花女》《三国演义》《红楼梦》...理学类《物理学》《数据结构》《生物学》...int671254225char‘Y’‘ca’‘h’‘a’数组用来将相同数据类型存储在存储单元里,数组的所有元素必须属于相同的数据类型。一个图书存储与数组存储的对应图来了解一下数组中包含的一些内容,如下图(左)所示。下面看一个整型数组的例子,下图(右)。书籍类型书籍编号书籍名书架名元素类型元素下标数据标识符score[4]671254225int类型元素3210下标score[0]数组名称即标识符6.2基本数组我们先从最基本的数组给大家讲起,其中包括数组的声明、初始化、引用、赋值以及利用foreach对数组进行遍历。6.2.1声明数组数组声明的格式如下图所示。【示例6-1】以下代码演示的是数组的声明方式。char[]bookName=“C#Unleashed”;数组类型[]数组名;所有数据类型标识符,需要符合标识符规范6.2.2数组的初始化数组必须在访问之前初始化。数组的初始化是通过赋值实现的,有两种方式:第一种是以字面形式指定数组的完整内容,格式如下图所示。使用字面值指定数组,元素值必须用逗号隔开,并全部放在花括号中,例如:int[]myIntArray={5,9,32,65,2};数组类型[]数组名={值1,值2,值3……值n}第二种方式是指定数组的大小,再使用new关键字初始化所有数组元素,格式如下图所示。也可以使用非常量的变量来进行初始化,如下图所示。数组类型[]数组名=new数组类型[常量值]关键字用来定义数组的大小这种方法会给所有的数组元素赋予同一个默认值,对数值类型来说,默认值是0。数组类型[]数组名=new数组类型[arraySize]这种方法会给所有的数组元素赋予同一个默认值,对数值类型来说,默认值是0。【示例6-2】以下代码演示的是数组的两种初始化方式的组合。需要提醒大家注意的是,使用这种方式,数组大小必须与元素个数相匹配。示例6-3所示的例子是错误的。【示例6-3】以下代码演示的是错误的数组的初始化方式。int[]myIntArray=newint[5]{9,3,23,6,14}int[]myIntArray=newint[10]{9,3,23,6,14}数组定义为有10个元素,但只定义了5个元素6.2.3数组引用在C#语言中,对数组的引用其实就是对数组元素的逐个使用,一维数组的引用形式以及相关举例如下图所示:注意:C#语言规定不能一次引用整个数组,引用时只能逐个元素引用。【示例6-4】演示的是对数组的引用方法。inta[n];数组名[下标]例如数组名为a,长度为n。数组的下标的下界是0,上界是n-1一维数组引用的形式6.2.4数组的赋值数组可以在初始化时就赋值,也可以先初始化后赋值,需要注意的是赋值时不能够批量处理,必须是单个进行。【示例6-5】演示的是为数组的元素赋值。如果定义的数组是基本数据类型,即int型、float型、double型、char型和bool型,在C#中定义数组后,若没有指定初始值,则依据数据类型的不同,会给数组元素赋予一个默认值,如下表所示。数据类型默认值int0double0.0char‘\u000’boolfalse数组属于一种引用类型,因此如果将数组名b赋给数组a,那么数组b在操作数组元素时,实质上操作的还是数组a,如下图所示。7812399085temptemp[0]temp[4]temp[3]temp[2]temp[1]int[]t=newint[5];t=temp;t[1]=44;7812399044temptemp[0]temp[4]temp[3]temp[2]temp[1]t对t[1]的改变,也改变了temp[1]。6.2.5遍历数组C#提供了foreach语句对数组元素进行遍历,该语句提供了一种简单、明了的方法来循环访问数组中的元素。1.foreach语句foreach语句属于循环语句中的一种,它的基本格式如下图所示。foreach语句对数组或集合(稍后会讲到)中的所有元素进行逐个代入,当全部代入完成后,控制传递给foreach后的下一个语句。foreach(类型变量名in集合){//语句}类型变量名集合任何数据类型任何C#集合或者数组属于标识符,应符合标识符规范2.用foreach语句遍历数组用foreach语句遍历数组即对数组中的所有元素进行逐个代入,直到全部完成或者出现跳出语句。下图中的程序对数组中的元素进行输出。【示例6-6】演示的是使用foreach语句遍历数组。需要提醒大家注意的是,使用foreach语句对数组进行遍历时,对于数组内容只能进行只读访问,而不能改变任何元素的值。6.3特殊数组我们前面见到的都是一维数组,是最常见最基本的。除了一维数组以外,还有一些较特殊的数组,如多维数组、数组的数组。我们这一节将给大家介绍这两种特殊数组。6.3.1多维数组多维数组中最常用的是二维数组,我们先介绍二维数组,再介绍其他维数组。1.二维数组的声明二维数组是最常见的多维数组,它由行和列组成。每行包含相同的列数,因而使数组称为矩形形状。二维数组的声明格式如下图所示。数组类型[,]数组名任何数据类型标识符,需符合标识符规范2.二维数组的初始化二维数组的初始化与一维的没有多大区别,只是中间多了一个逗号,两边需标明数组的行数和列数,如下图所示。还有一种也比较常用的初始化方式,如下图所示。在二维数组中,通常把行数称做行下标,列数称做列下标。数组类型[,]数组名=new数组类型[行数,列数]关键字二维数组由行数个一维数组组成二维数组由行数个一维数组组成,每个一维数组中有列数个元素数组类型[,]数组名;数组名=new数组类型[行数,列数]int[,]array1;array1=newint[2,2]举例二维数组实质是由多个一维数组组成,具体说明如下图所示:inta[3][4];inta0[4];inta1[4];inta2[4];等价于3个长度都为4的一维数组二维数组由多个一维数组组成:a[0][3]a[0][2]a[0][1]a[0][0]a[1][3]a[1][2]a[1][1]a[1][0]a[2][3]a[2][2]a[2][1]a[2][0]a[0]a[1]a[2]行下标和列下标都是从0开始的3.二维数组的赋值二维数组可以在初始化时随即进行赋值,也可以进行单独的赋值,下面给大家列举三种常用的赋值方法。【示例6-7】以下代码演示的是二维数组的赋值方式。int[,]array1=newint[2,3]{{1,2,3},{4,5,6}};int[,]array2=newint[,]{{1,2,3},{4,5,6}};int[,]array3={{1,2,3},{4,5,6}};4.二维数组的引用二维数组的引用形式如下图所示。【示例6-8】演示的是二维数组的引用方法。5.利用foreach语句遍历二维数组foreach循环语句也可以访问二维数组中的所有元素,其方式与访问一维数组相同。【示例6-9】演示的是使用foreach语句遍历二维数组。数组名[行号,列号]6.三维数组简介虽然C#语言对于数组的维度并没有上限,但是处理高维数组是很头疼的事。一般尽量避免处理四维或高于四维的数组。在此我们只对三维数组做一个简单介绍。同二维数组声明格式类似,三维数组在声明时只需要在中括号中用两个逗号隔开即可,如下图所示。比如声明了这样一个三维数组int[,,]calories=newint[3,6,3];数组类型[,,]数组名为了便于大家理解,右图给出了三维数组的详细存储方式。【示例6-10】演示的是三维数组的声明及赋值方式。90075010203001000270050070021004009001780600120011005752527838901900785450786150078232110356098040074058714010047886746278256254245236070224545686710001042421122543705478674343750580637100052050070045040090017806001200230575420783[0,,][,0,][,1,][,2,][,3,][,4,][,5,][1,,][,0,][,1,][,2,][,3,][,4,][,5,][,0,][,1,][,2,][,3,][,4,][,5,][,0,][,1,][,2,][,3,][,4,][,5,][2,,][3,,][,,0][,,1][,,2][,,0][,,1][,,2][,,0][,,1][,,2][,,0][,,1][,,2]caloriescalories[1,1,2]=15006.3.2交错数组交错数组也称为数组的数组,是一种不规则的二维数组,因此也被称为锯齿形数组。它与二维数组(矩形数组)最大的区别就在于每一行的长度并不相同,我们可以把它想象成由不同长度组成的一维数组组成的二维数组,如下图所示。数组的每一行的长度不同,因此称其为“交错”。这样做比规则的矩形数组节省了内存空间,代价就是在创建和使用时也要按照其特点进行操作。137905265911156323267131.交错数组声明交错数组的声明格式如下图所示。【示例6-11】以下代码演示的是上图所示的交错数组的声明方式。int[][]jaggedArray=newint[4][];数组类型[][]数组名=new数组类型[行数][]关键字任何数据类型交错数组的行数是固定的,因此这儿的行数必须写2.交错数组初始化和赋值若以行位单位对交错数组进行初始化,然后对每个元素进行赋值,则应如图所示。jaggedArray[0]=newint[6];jaggedArray[1]=newint[2];jaggedArray[2]=newint[3];jaggedArray[3]=newint[5];以行为单位进行初始化jaggedArray[1][1]=2;jaggedArray[3][4]=32;对每个数组元素分别进行赋值第0行包括6个元素第一行第一列元素值为2也可以直接给交错数组初始化赋值,如下图所示。还可以在声明的同时初始化,如下图所示。【示例6-12】以下代码演示的是交错数组的运用。int[][]jaggedArray=newint[][]{newint[]{1,3,5,7,9},newint[]{0,2},newint[]{5,11,26},newint[]{91,3,56,67,32}};jaggedArray[0]=newint[]{1,3,5,7,9,13};jaggedArray[1]=newint[]{0,2};jaggedArray[2]=newint[]{5,11,26};jaggedArray[3]=newint[]{91,3,56,67,32};6.4对数组的使用有时候对数组的合理利用将使编程变得比较容易,我们在这一节就来给大家介绍一下如何利用数组。主要从两大方面去讲:数组作为方法参数以及类中的数组。6.4.1数组作为方法参数数组可以作为参数传递给方法。因为数组是引用类型,所以方法可以改变数组的值。数组作

1 / 46
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功