使用数组和集合.ppt

上传人:小飞机 文档编号:6241666 上传时间:2023-10-09 格式:PPT 页数:36 大小:459.50KB
返回 下载 相关 举报
使用数组和集合.ppt_第1页
第1页 / 共36页
使用数组和集合.ppt_第2页
第2页 / 共36页
使用数组和集合.ppt_第3页
第3页 / 共36页
使用数组和集合.ppt_第4页
第4页 / 共36页
使用数组和集合.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《使用数组和集合.ppt》由会员分享,可在线阅读,更多相关《使用数组和集合.ppt(36页珍藏版)》请在三一办公上搜索。

1、8 使用数组和集合,2,8 使用数组和集合,数组是一种自定义类型,是引用类型。数组是一个无序的元素序列。数组中的所有元素都具有相同的类型数组中的元素存储在连续的内存块中,使用整数的索引来访问。本课主要介绍以下内容:定义和初始化数组访问数组和数组元素认识数组作为方法的参数的作用理解参数数组了解一些常用集合类的使用,3,8.1 声明数组变量,C#中,可以创建一维数组,type arrayName;,int array1;,?,int array2=new int5;,int array3=new int1,3,5,7,9;,int array4=1,2,3,4,5,6;,栈,堆,示例代码位于“Le

2、sson7UseArray”,4,8.1 声明数组变量,C#中,还可以创建多维数组,type,arrayName;,int,array5=new int2,3;,int array6=1,2,3,4,5,6;,栈,堆,示例代码位于“Lesson7UseArray”,5,8.1 声明数组变量,C#中,还可以创建交错数组(数组的数组),type arrayName;,int array7=new int6;array71=new int41,2,3,4;array72=1,3,5,7,9;,栈,堆,示例代码位于“Lesson7UseArray”,6,8.1 声明数组变量,数组是对象,使用时要用ne

3、w进行实例化允许创建大小为0的数组。数组可以是一维、多维或交错的。数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。交错数组是数组的数组,因此其元素是引用类型并初始化为 null。数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。数组元素可以是任何类型,包括数组类型。,7,8.2 访问数组成员,初始化数组访问数组成员大括号中的值不都是常数,可以是在运行时通过运算而得到的值:,int numbers=new int510,9,8,7,6;numbers4=5;,string animal=Mouse,Cat,Lion;animal1=Elephant;stri

4、ng someAnimal=animal2;,Random r=new Random();int pins=new int4 r.Next()%100,r.Next()%100,r.Next()%100,r.Next()%100;,示例代码位于“Lesson7UseArray”,8,8.2.1 遍历整个数组,使用 for语句可以遍历所有数组元素,int numbers=4,5,6,1,2,3,-2,-1,0;for(int i=0;i numbers.Length;i+)Console.WriteLine(numbersi);,示例代码位于“Lesson7UseArray”,9,8.2.2 遍

5、历整个数组,使用 foreach 语句为数组中的每一个元素反复执行嵌入的代码,int numbers=4,5,6,1,2,3,-2,-1,0;foreach(int i in numbers)Console.WriteLine(i);,示例代码位于“Lesson7UseArray”,10,8.2.3 for与foreach的比较,foreach语句总是遍历整个数组。如果只需要遍历数组的特定部分(如前半部分),或者绕过特定元素(如只遍历索引为偶数的元素),最好是使用for语句。foreach语句总是从索引0遍历到索引Length-1,如果需要反向遍历,那么最好是使用for语句。如果循环体需要知道

6、元素索引,而不仅仅是元素值,那么必须使用for语句。如果需要修改数组元素,那么必须使用for语句,因为foreach语句的循环变量是一个只读变量。,11,8.2.4 数组的有关属性,数组的属性:Length:数组包含多少个元素数组的方法:Clone:获取与源数组一模一样的数组CopyTo:将源数组拷贝到目标数组的指定位置Array类的方法:Sort:排序Reverse:反转,12,8.2.5 理解深拷贝与浅拷贝,阅读教材P176关于“复制数组”一节如果数组元素是引用类型,进行数组元素复制时,只复制对象的引用,不会为新数组对象分配新的内存空间。这称为“浅拷贝”,参考示例代码位于“Lesson8U

7、seArray”中的Step 4这里定义了一个Person数组,而Person是一个对象,13,8.3 认识集合,数组的大小是固定的。如果要扩容,需要重新使用new来分配内存空间。有时,还有其它一些要求,如:先进先出,FIFO,即队列后进先出,LIFO,即栈按键值查找,即字典功能有序教材P184192介绍了以下集合类型,请自动阅读ArrayList,顺序表Queue,队列Stack,栈HashTable,哈希表,实现字典功能SortedList,有序表,14,8.3.1 示例:宾馆住宿程序,主要学习使用集合类对象,将数据绑定到comboBox控件了解数据绑定熟悉List类型的使用,15,8.3

8、.1.1 定义Room类,RoomType属性将对应下拉列表控制显示的名称Price字段,用于选取下拉列表时,获取对应的值,16,8.3.2 声明列表对象并初始化,指定数据源,指定显示字段,指定值字段,也可以使用ArrayList,但效率不高,17,8.3.3 计算,数据绑定后,可以使用SelectedValue属性获取选择项的值,省去了原来的许多判断。,18,8.4 数组作为方法的参数,为演示数组作方法的参数,我们来编写一组方法方法1:将数组内容转换为字符串方法名:ArrayToString功能:将数组内容转换为字符串参数:int array返回值:string,表示数组内容的字符串,示例代

9、码位于“Lesson7ArraySample”,19,8.4.1 ArrayToString方法,private string ArrayToString(int array)/如果array为空,或者array中无元素,返回空串 if(array=null)return String.Empty;if(array.Length=0)return String.Empty;string s=String.Format(0,array0);for(int i=1;iarray.Length;i+)s+=String.Format(,0,arrayi);return s;,这个方法可以修改arra

10、y数组的内容吗?,参数array是按值传递还是按引用传递?,示例代码位于“Lesson7ArraySample”,20,8.4.2 ArraySum方法,方法2:求数组中一组数的和方法名:ArraySum功能:求数组中的所有整数的和参数:int array返回值:int,整数数组中所有数的和,示例代码位于“Lesson7ArraySample”,21,ArraySum方法,private int ArraySum(int array)/如果array为空,返回0值 if(array=null)return 0;int sum=0;foreach(int i in array)sum+=i;re

11、turn sum;,示例代码位于“Lesson7ArraySample”,22,8.4.3 利用数组接收不确定个数的参数,关键字params它用来定义一个数组,这个数组可以接收调用者传递过来的不确定个数的一组数据。方法3:求一组数的和方法名:Sum功能:求一组整数的和参数:params int array返回值:int,这组数的和,private void button2_Click(object sender,EventArgs e)int total=Sum(11,12,13,14,15,16,17);Output(String.Format(这组数的和是:0,total);,示例代码位于

12、“Lesson7ArraySample”,23,Sum方法,private int Sum(params int array)int sum=0;foreach(int i in array)sum+=i;return sum;,示例代码位于“Lesson7ArraySample”,24,8.4.4 比较参数数组和可选参数,教材3.4节介绍了可选参数和命名参数可以通过以下形式调用,private int Sum(int a=0,int b=0,int c=0,int d=0)return a+b+c+d;,示例代码位于“Lesson7ArraySample”,total=Sum(11,12);

13、/结果是23total=Sum(11,12,13);/结果是36total=Sum(11,12,13,14);/结果是50total=Sum(a:12,d:30);/结果是42,25,8.4.4 比较参数数组和可选参数,如果同时有参数数组和可选参数的两个Sum方法,下面的语句,会调用哪个方法?,private int Sum(params int array),private int Sum(int a=0,int b=0,int c=0,int d=0),total=Sum(11,12,13);/结果是36,最佳匹配原则:优先选用可选参数,26,8.4.5 参数的按引用传递,方法3:计算一组

14、数的和与平均值方法名:Sum功能:求一组整数的和参数:params int array返回值:int,这组数的和,方法的返回值只能计算一个值,要计算2个,只能通过参数返回,27,另一个Sum方法,private void Sum(int sum,double aver,params int array)sum=0;aver=0.0;foreach(int i in array)sum+=i;if(array.Length0)aver=(double)sum/array.Length;,这样计算可以吗?,示例代码位于“Lesson7ArraySample”,28,另一个Sum方法,private

15、 void button3_Click(object sender,EventArgs e)Output(计算一组数11,12,13,14,15,16,17和与平均值:);int sum=0;double average=0.0;Sum(sum,average,11,12,13,14,15,16,17);Output(String.Format(这组数的和是0,平均值是1,sum,average);,因为方法参数默认是按值进行传递的。能不能够像指针一样,使用按地址传递呢?,示例代码位于“Lesson7ArraySample”,29,使用ref关键字,private void Sum(ref i

16、nt sum,ref double aver,params int array)sum=0;aver=0.0;foreach(int i in array)sum+=i;if(array.Length0)aver=(double)sum/array.Length;,参数列表中使用ref关键字,编译器就知道相应变量的数值将通过引用来传递。调用方法时,也必须对实参使用ref关键字,示例代码位于“Lesson7ArraySample”,30,使用ref关键字,private void button3_Click(object sender,EventArgs e)Output(计算一组数11,12,

17、13,14,15,16,17和与平均值:);int sum=0;double average=0.0;Sum(ref sum,ref average,11,12,13,14,15,16,17);Output(String.Format(这组数的和是0,平均值是1,sum,average);,调用时也须使用ref关键字,示例代码位于“Lesson7ArraySample”,31,8.4.6 编写第4个方法:GenerateArray,方法4:给数组元素赋随机值方法名:GenerateArray功能:逐个给数组中的每个元素赋随机值参数:int array返回值:无,private void but

18、ton1_Click(object sender,EventArgs e)int number=new int10;GenerateArray(number);Output(数组中的数为:);Output(ArrayToString(number);Output(String.Format(这组数的和是:0,ArraySum(number);,示例代码位于“Lesson7ArraySample”,32,GenerateArray方法,private void GenerateArray(int array)Random r=new Random();for(int i=0;i array.Le

19、ngth;i+)arrayi=r.Next(0,100);,因为数组变量本身是引用类型,所以GenerateArray方法可以改变array数组元素的值,示例代码位于“Lesson7ArraySample”,33,另一个GenerateArray方法,方法5:给数组元素赋随机值方法名:GenerateArray功能:对数组array初始化,并对每个元素赋随机值参数:int array,int count(表示要多少个数)返回值:无,private void button1_Click(object sender,EventArgs e)int number;GenerateArray(numb

20、er,10);Output(数组中的数为:);Output(ArrayToString(number);Output(String.Format(这组数的和是:0,ArraySum(number);,这儿说明,对数组初始化要在GenerateArray方法内部进行,示例代码位于“Lesson7ArraySample”,34,另一个GenerateArray方法,private void GenerateArray(int array,int count)array=new intcount;Random r=new Random();for(int i=0;i array.Length;i+)

21、arrayi=r.Next(0,100);,编译时出错。使用ref关键字说明参数array,编译时也会出错。使用out关键字,示例代码位于“Lesson7ArraySample”,35,out关键字,由于C#强制性要求明确赋值,即所有参数变量在传递给方法前必须经过了初始化赋值。这样可以避免由于使用未赋值变量而导致的常见错误。通过使用关键字out,可以避免多余的初始化当需要通知编译器将在方法内部进行变量初始化时,就应使用关键字out,从而可以把未初始化的变量传递给方法。,int number;GenerateArray(out number,10);,private void GenerateArray(out int array,int count),36,8.6 本课小结,本课主要介绍数组的声明、初始化及使用数组是引用类型,通过new来初始化可以使用foreach循环遍历数组了解数组作为方法参数的作用与值类型的不同掌握方法参数数组(params)与方法的可选参数的作用与异同进一步掌握引用参数(ref)和输出参数(out)的作用了解集合类的使用初步熟悉数据绑定的使用,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号