数组和集合学习教案.pptx
数组和集合数组和集合(jh)第一页,共30页。5.1.2一维数组的动态初始化一维数组的动态初始化动态初始化需要借助动态初始化需要借助new运算符,为数组元素分配内存空间,运算符,为数组元素分配内存空间,并为数组元素赋初值,数值类型初始化为并为数组元素赋初值,数值类型初始化为0,布尔类型初始化,布尔类型初始化为为false,字符串类型初始化为,字符串类型初始化为null。动态初始化数组的格式如下:动态初始化数组的格式如下:数组类型数组类型数组名数组名=new数据类型数据类型n元素值元素值0,元素值元素值1,元元素值素值n-1;其中,其中,“数组类型数组类型”是数组中数据元素的数据类型,是数组中数据元素的数据类型,n为为“数组数组长度长度”,可以是整型常量或变量,后面一层大括号里为初始值,可以是整型常量或变量,后面一层大括号里为初始值部分。部分。1.不给定初始值的情况不给定初始值的情况如果如果(rgu)不给出初始值部分,各元素取默认值。例如:不给出初始值部分,各元素取默认值。例如:inta=newint10;该数组在内存中各数组元素均取默认值该数组在内存中各数组元素均取默认值0。第1页/共30页第二页,共30页。2.给定初始值的情况给定初始值的情况如果给出初始值部分,各元素取相应的初值,而且如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与给出的初值个数与“数组长度数组长度”相等。此时可以省略相等。此时可以省略“数数组长度组长度”,因为后面的大括号中已列出了数组中的全部,因为后面的大括号中已列出了数组中的全部元素。例如:元素。例如:inta=newint101,2,3,4,5,6,7,8,9,10;或或inta=newint1,2,3,4,5,6,7,8,9,10;在这种情况下,不允许在这种情况下,不允许“数组长度数组长度”为变量为变量(binling),例如:例如:intn=5;/定义变量定义变量(binling)nintmyarr=newintn1,2,3,4,5;/错误错误如果给出如果给出“数组长度数组长度”,则初始值的个数应与,则初始值的个数应与“数组长度数组长度”相等,否则出错。例如:相等,否则出错。例如:intmya=newint21,2;/正确正确intmya=newint21,2,3;/错误错误intmya=newint21;/错误错误第2页/共30页第三页,共30页。5.1.3一维数组的静态初始化一维数组的静态初始化静态初始化数组时,必须与数组定义结合在一起,否则会出错。静态初始化数组时,必须与数组定义结合在一起,否则会出错。静态初始化数组的格式如下:静态初始化数组的格式如下:数据类型数据类型数组名数组名=元素值元素值0,元素值元素值1,元素值元素值n-1;用这种方法对数组进行初始化时,无需说明数组元素的个数,用这种方法对数组进行初始化时,无需说明数组元素的个数,只需按顺序列出数组中的全部元素即可,系统会自动计算并分配只需按顺序列出数组中的全部元素即可,系统会自动计算并分配数组所需的内存空间。数组所需的内存空间。例如,以下是对整型数组例如,以下是对整型数组myarr的静态初始化:的静态初始化:intmyarr=1,2,3,4,5;在这种情况在这种情况(qngkung)下,不能将数组定义和静态初始化分开,下,不能将数组定义和静态初始化分开,例如,以下是错误的。例如,以下是错误的。intmyarr;myarr=1,2,3,4,5;/错误的数组的静态初始化错误的数组的静态初始化第3页/共30页第四页,共30页。5.1.4访问一维数组中的元素访问一维数组中的元素访问一维数组中的某个元素:名称访问一维数组中的某个元素:名称下标或索引下标或索引。所有元素下标从所有元素下标从0开始,到数组长度减开始,到数组长度减1为止。例如,以下语句为止。例如,以下语句输出数组输出数组myarr的所有元素值:的所有元素值:for(i=0;i5;i+)Console.Write(0,ai);Console.WriteLine();C#还提供还提供foreach语句。该语句提供一种简单、明了的方法来循语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,以下代码环访问数组的元素。例如,以下代码(dim)定义一个名称为定义一个名称为mya的数组,并用的数组,并用foreach语句循环访问该数组。语句循环访问该数组。intmya=1,2,3,4,5,6;foreach(intiinmya)System.Console.Write(0,i);Console.WriteLine();输出为:输出为:123456。第4页/共30页第五页,共30页。5.1.5一组数组的越界一组数组的越界若有如下语句定义并初始化数组若有如下语句定义并初始化数组ca:intca=newint101,2,3,4,5,6,7,8,7,9,10;数组数组ca的合法下标为的合法下标为09,如果程序中使用,如果程序中使用ca10或或ca50,则超过了数组规定的下标,因此越界了。则超过了数组规定的下标,因此越界了。C#系统系统(xtng)会提示会提示以下出错信息。以下出错信息。未处理的异常未处理的异常:Syatem.IndexOutOfRangeException:索引超索引超出了数组界限。出了数组界限。第5页/共30页第六页,共30页。【例【例5.1】设计一个控制台应用程序,采用二分查找】设计一个控制台应用程序,采用二分查找(chzho)方法在给定的有序数组方法在给定的有序数组a中查找中查找(chzho)用户输入的值,用户输入的值,并提示相应的查找并提示相应的查找(chzho)结果。结果。usingSystem;namespaceProj5_1classProgramstaticvoidMain(stringargs)doublea=newdouble100,1.2,2.5,3.1,4.6,5.0,6.7,7.6,8.2,9.8;doublek;intlow=0,high=9,mid;Console.Write(k:);k=double.Parse(Console.ReadLine();while(lowk)high=mid-1;elselow=mid+1;Console.WriteLine(未找到未找到0,k);第6页/共30页第七页,共30页。5.2二维数组二维数组5.2.1二维数组的定义二维数组的定义定义二维数组的语法格式如下定义二维数组的语法格式如下(rxi):数组类型数组类型,数组名数组名;其中,其中,“数据类型数据类型”为为C#中合法的数据类型,中合法的数据类型,“数组数组名名”为为C#中合法的标识符。中合法的标识符。例如,以下语句定义了例如,以下语句定义了3个二维数组,即整型数组个二维数组,即整型数组x、双精度数组双精度数组y和字符串数组和字符串数组z。int,x;double,y;string,z;对于多维数组,可以作类似的推广,例如,以下语对于多维数组,可以作类似的推广,例如,以下语句定义了一个三维数组句定义了一个三维数组p。int,p;第7页/共30页第八页,共30页。5.2.2二维数组的动态初始化二维数组的动态初始化动态初始化二维数组的格式如下:动态初始化二维数组的格式如下:数据类型数据类型,数组名数组名=new数据类型数据类型mn元素值元素值0,0,元素值元素值0,1,元素值元素值0,n-1,元素值元素值1,0,元素值元素值1,1,元素值元素值1,n-1,元素值元素值m-1,0,元素值元素值m-1,1,元素值元素值m-1,n-1;其中,其中,“数组类型数组类型”是数组中数据元素的数据类型,是数组中数据元素的数据类型,m、n分别分别(fnbi)为行数和列数,即各维的长度,可以是整型常量或变量。为行数和列数,即各维的长度,可以是整型常量或变量。第8页/共30页第九页,共30页。1.不给定初始值的情况不给定初始值的情况如果不给出初始值部分,各元素如果不给出初始值部分,各元素(yuns)取默认值。例取默认值。例如:如:int,x=newint23;该数组各数组元素该数组各数组元素(yuns)均取默认值均取默认值0。第9页/共30页第十页,共30页。2.给定初始值的情况给定初始值的情况如果给出初始值部分,各元素取相应的初值,而且给出的初值个如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与对应的数与对应的“数组长度数组长度(chngd)”相等。此时可以省略相等。此时可以省略“数组长度数组长度(chngd)”,因为后面的大括号中已列出了数组中的全部元素。例如:,因为后面的大括号中已列出了数组中的全部元素。例如:int,x=newint231,2,3,4,5,6;或或int,x=newint,1,2,3,4,5,6;第10页/共30页第十一页,共30页。5.2.3二维数组的静态初始化二维数组的静态初始化静态初始化数组时,必须与数组定义静态初始化数组时,必须与数组定义(dngy)结合在一起,否结合在一起,否则会出错。静态初始化数组的格式如下:则会出错。静态初始化数组的格式如下:数据类型数据类型,数组名数组名=元素值元素值0,0,元素值元素值0,1,元素值元素值0,n-1,元素值元素值1,0,元素值元素值1,1,元素值元素值1,n-1,元素值元素值m-1,0,元素值元素值m-1,1,元素值元素值m-1,n-1;例如,以下语句是对整型数组例如,以下语句是对整型数组myarr的静态初始化。的静态初始化。int,myarr=1,2,3,4,5,6;第11页/共30页第十二页,共30页。5.2.4访问二维数组中的元素访问二维数组中的元素为了访问二维数组中的某个元素,需指定为了访问二维数组中的某个元素,需指定(zhdng)数组数组名称和数组中该元素的行下标和列下标。例如,以下语句名称和数组中该元素的行下标和列下标。例如,以下语句输出数组输出数组myarr的所有元素值。的所有元素值。for(i=0;i2;i+)for(j=0;j3;j+Console.Write(0,myarri,j);Console.WriteLine();对于多维数组,也可以使用对于多维数组,也可以使用foreach语句来循环访问每一语句来循环访问每一个元素,例如。个元素,例如。int,myb=newint3,21,2,3,4,5,6;foreach(intiinmyb)Console.Write(0,i);Console.WriteLine();其输出为:其输出为:123456。第12页/共30页第十三页,共30页。【例【例5.2】设计设计(shj)一个控制台应用程序,输出九行杨辉三角形。一个控制台应用程序,输出九行杨辉三角形。usingSystem;namespaceProj5_2classProgramconstintN=10;staticvoidMain(stringargs)inti,j;int,a=newintN,N;for(i=1;iN;i+)/1列和对角线元素列和对角线元素(yuns)均为均为1ai,i=1;ai,1=1;for(i=3;iN;i+)/求第求第3N行的元素行的元素(yuns)值值for(j=2;j=i-1;j+)ai,j=ai-1,j-1+ai-1,j;for(i=1;iN;i+)/输出数序输出数序for(j=1;j=i;j+)Console.Write(0,-2,ai,j);Console.WriteLine();第13页/共30页第十四页,共30页。5.3Array类类Array类是所有类是所有(suyu)数组类型的抽象基类数组类型的抽象基类型。型。属性属性说明说明Length获得一个获得一个32位整数,该整数表示位整数,该整数表示Array的所有维数中元素的总数。的所有维数中元素的总数。LongLength获得一个获得一个64位整数,该整数表示位整数,该整数表示Array的所有维数中元素的总数。的所有维数中元素的总数。Rank获取获取Array的秩(维数)。的秩(维数)。第14页/共30页第十五页,共30页。方法方法说明说明BinarySearch静态方法。使用二进制搜索算法在一维的排序静态方法。使用二进制搜索算法在一维的排序Array中搜索值。中搜索值。Copy静态方法。将一个静态方法。将一个Array的一部分元素复制到另一个的一部分元素复制到另一个Array中,并根据中,并根据需要执行类型强制转换和装箱。需要执行类型强制转换和装箱。CopyTo非静态方法。将当前一维非静态方法。将当前一维Array的所有元素复制到指定的一维的所有元素复制到指定的一维Array中。中。Find静态方法。搜索与指定谓词定义的条件匹配的元素,然后返回整个静态方法。搜索与指定谓词定义的条件匹配的元素,然后返回整个Array中的第一个匹配项。中的第一个匹配项。ForEach静态方法。对指定数组的每个元素执行指定操作。静态方法。对指定数组的每个元素执行指定操作。GetLength非静态方法。获取一个非静态方法。获取一个32位整数,该整数表示位整数,该整数表示Array的指定维中的元素的指定维中的元素数。数。GetLongLength非静态方法。获取一个非静态方法。获取一个64位整数,该整数表示位整数,该整数表示Array的指定维中的元素的指定维中的元素数。数。GetLowerBound非静态方法。获取非静态方法。获取Array中指定维度的下限。中指定维度的下限。GetUpperBound非静态方法。获取非静态方法。获取Array的指定维度的上限。的指定维度的上限。GetValue非静态方法。获取当前非静态方法。获取当前Array中指定元素的值。中指定元素的值。IndexOf静态方法。返回一维静态方法。返回一维Array或部分或部分Array中某个值第一个匹配项的索引。中某个值第一个匹配项的索引。Resize静态方法。将数组的大小更改为指定的新大小。静态方法。将数组的大小更改为指定的新大小。Reverse静态方法。反转一维静态方法。反转一维Array或部分或部分Array中元素的顺序。中元素的顺序。SetValue非静态方法。将当前非静态方法。将当前Array中的指定元素设置为指定值。中的指定元素设置为指定值。Sort静态方法。对一维静态方法。对一维Array对象中的元素进行排序。对象中的元素进行排序。第15页/共30页第十六页,共30页。【例【例5.3】设计一个控制台应用程序,产生设计一个控制台应用程序,产生(chnshng)10个个019的随机整数,对其递增排序并输出。的随机整数,对其递增排序并输出。usingSystem;namespaceProj5_3classProgramstaticvoidMain(stringargs)inti,k;intmyarr=newint10;/定义一个定义一个(y)一维数组一维数组Randomrandobj=newRandom();/定义一个定义一个(y)随机对象随机对象for(i=myarr.GetLowerBound(0);i=myarr.GetUpperBound(0);i+)k=randobj.Next()%20;/返回一个返回一个(y)019的正整数的正整数myarr.SetValue(k,i);/给数组元素赋值给数组元素赋值Console.Write(随机数序随机数序:);for(i=myarr.GetLowerBound(0);i=myarr.GetUpperBound(0);i+)Console.Write(0,myarr.GetValue(i);Console.WriteLine();Array.Sort(myarr);/数组排序数组排序Console.Write(排序数序排序数序:);for(i=myarr.GetLowerBound(0);i=myarr.GetUpperBound(0);i+)Console.Write(0,myarr.GetValue(i);Console.WriteLine();第16页/共30页第十七页,共30页。5.4交错交错(jiocu)数组数组交错数组:元素为数组的数组,元素的维度和大小可以不同。多维交错数组:元素为数组的数组,元素的维度和大小可以不同。多维数组:元素的维度和大小的均相同。数组:元素的维度和大小的均相同。5.4.1交错数组的定义和初始化交错数组的定义和初始化以下语句定义了一个以下语句定义了一个(y)由由3个元素组成的一维数组,其中每个元个元素组成的一维数组,其中每个元素都是一个素都是一个(y)一维整数数组:一维整数数组:intarrj=newint3;必须初始化必须初始化arrj的元素后才可以使用它。可以如下所示初始化该元素:的元素后才可以使用它。可以如下所示初始化该元素:arrj0=newint5;arrj1=newint4;arrj2=newint2;第17页/共30页第十八页,共30页。5.4.2访问交错数组中的元素访问交错数组中的元素交错数组元素的访问方式与多维数组类似,通常使用交错数组元素的访问方式与多维数组类似,通常使用Length方法方法返回包含在交错数组中的数组的数目返回包含在交错数组中的数组的数目(shm),例如,以下程序定义,例如,以下程序定义一个交错数组一个交错数组myarr并初始化,最后输出所有元素的值。并初始化,最后输出所有元素的值。intmyarr=newint3;myarr0=newint1,2,3,4,5,6;myarr1=newint7,8,9,10;myarr2=newint11,12;for(inti=0;imyarr.Length;i+)Console.Write(myarr(0):,i);for(intj=0;jmyarri.Length;j+)Console.Write(0,myarrij);Console.WriteLine();程序运行结果如下:程序运行结果如下:myarr(0):123456myarr(1):78910myarr(2):1112第18页/共30页第十九页,共30页。5.5ArrayList类类ArrayList类(在命名空间类(在命名空间System.Collections中),用于中),用于建立不定长度的数组,由于该类数组的数据类型为建立不定长度的数组,由于该类数组的数据类型为Object,其长度不固定,可以其长度不固定,可以(ky)将其对象看成是一个集合。将其对象看成是一个集合。定义定义ArrayList类的对象的语法格式如下:类的对象的语法格式如下:ArrayList数组名数组名=newArrayList();例如,以下语句定义一个例如,以下语句定义一个ArrayList类的对象类的对象myarr,可以,可以(ky)将它作为一个数组使用:将它作为一个数组使用:ArrayListmyarr=newArrayList();第19页/共30页第二十页,共30页。属性属性说明说明Capacity获取或设置获取或设置ArrayList可包含的元素数。可包含的元素数。Count获取获取ArrayList中实际包含的元素数。中实际包含的元素数。Item获取或设置指定索引处的元素。获取或设置指定索引处的元素。第20页/共30页第二十一页,共30页。方法方法说明说明Add将对象添加到将对象添加到ArrayList的结尾处。的结尾处。AddRange将一个将一个ICollection对象的元素添加到对象的元素添加到ArrayList的末尾。的末尾。BinarySearch使用二分检索算法在已排序的使用二分检索算法在已排序的ArrayList或它的一部分中查找特定元素。或它的一部分中查找特定元素。Clear从从ArrayList中移除所有元素。中移除所有元素。Clone创建创建ArrayList的浅表副本。的浅表副本。Contains确定某元素是否在确定某元素是否在ArrayList中。中。CopyTo将将ArrayList或它的一部分复制到一维数组中。或它的一部分复制到一维数组中。GetRange返回返回ArrayList,它表示源,它表示源ArrayList中元素的子集。中元素的子集。IndexOf返回返回ArrayList或它的一部分中某个值的第一个匹配项的从零开始的索引。或它的一部分中某个值的第一个匹配项的从零开始的索引。Insert将元素插入将元素插入ArrayList的指定索引处。的指定索引处。InsertRange将集合中的某个元素插入将集合中的某个元素插入ArrayList的指定索引处。的指定索引处。LastIndexOf返回返回ArrayList或它的一部分中某个值的最后一个匹配项的从零开始的索或它的一部分中某个值的最后一个匹配项的从零开始的索引。引。Remove从从ArrayList中移除特定对象的第一个匹配项。中移除特定对象的第一个匹配项。RemoveAt移除移除ArrayList的指定索引处的元素。的指定索引处的元素。RemoveRange从从ArrayList中移除一定范围的元素。中移除一定范围的元素。Reverse将将ArrayList或它的一部分中元素的顺序反转。或它的一部分中元素的顺序反转。SetRange将集合中的元素复制到将集合中的元素复制到ArrayList中一定范围的元素上。中一定范围的元素上。Sort对对ArrayList或它的一部分中的元素进行排序。或它的一部分中的元素进行排序。ToArray将将ArrayList的元素复制到新数组中。的元素复制到新数组中。ToString返回表示当前返回表示当前Object的的String。TrimToSize将容量设置为将容量设置为ArrayList中元素的实际数目。中元素的实际数目。第21页/共30页第二十二页,共30页。【例【例5.4】定义一个定义一个ArrayList对象,用于存放若干个姓名,对其进对象,用于存放若干个姓名,对其进行排序行排序(pix),并输出排序,并输出排序(pix)后的结果。后的结果。usingSystem;usingSystem.Collections;/新增新增namespaceProj5_4classProgramstaticvoidMain(stringargs)ArrayListmyarr=newArrayList();myarr.Add(Smith);myarr.Add(Mary);myarr.Add(Dava);myarr.Add(John);Console.Write(排序排序(pix)前序列前序列:);foreach(Stringsnameinmyarr)Console.Write(sname+);Console.WriteLine();myarr.Sort();Console.Write(排序排序(pix)前序列前序列:);foreach(Stringsnameinmyarr)Console.Write(sname+);Console.WriteLine();第22页/共30页第二十三页,共30页。5.6List类类List类是类是ArrayList类的泛型等效类,该类使用大小可按需动类的泛型等效类,该类使用大小可按需动态增加的数组实现态增加的数组实现IList泛型接口。泛型接口。定义定义List类的对象的语法格式如下:类的对象的语法格式如下:List数组名数组名=newList();例如,以下语句定义一个例如,以下语句定义一个(y)List类的对象类的对象myset,其元,其元素类型为素类型为string,可以将它作为一个,可以将它作为一个(y)数组使用:数组使用:Listmyset=newList();第23页/共30页第二十四页,共30页。属性属性说明说明Capacity获取或设置该内部数据结构在不调整大小的情况下获取或设置该内部数据结构在不调整大小的情况下能够保存的元素总数。能够保存的元素总数。Count获取获取List中实际包含的元素数。中实际包含的元素数。Item获取或设置指定索引处的元素。获取或设置指定索引处的元素。第24页/共30页第二十五页,共30页。方法方法说明说明Add将对象添加到将对象添加到List的结尾处。的结尾处。AddRange将指定集合的元素添加到将指定集合的元素添加到List的末尾。的末尾。BinarySearch使用对分检索算法在已排序的使用对分检索算法在已排序的List或它的一部分中查找特定或它的一部分中查找特定元素。元素。Clear从从List中移除所有元素。中移除所有元素。Contains确定某元素是否在确定某元素是否在List中。中。CopyTo将将List或它的一部分复制到一个数组中。或它的一部分复制到一个数组中。Exists确定确定List是否包含与指定谓词所定义是否包含与指定谓词所定义(dngy)的条件相匹配的元素。的条件相匹配的元素。Find搜索与指定谓词所定义搜索与指定谓词所定义(dngy)的条件相匹配的元素,并返回整个的条件相匹配的元素,并返回整个List中的第一个匹配元素。中的第一个匹配元素。FindAll检索与指定谓词所定义检索与指定谓词所定义(dngy)的条件相匹配的所有元素。的条件相匹配的所有元素。FindIndex搜索与指定谓词所定义搜索与指定谓词所定义(dngy)的条件相匹配的元素,返回的条件相匹配的元素,返回List或它或它的一部分中第一个匹配项的从零开始的索引。的一部分中第一个匹配项的从零开始的索引。FindLast搜索与指定谓词所定义搜索与指定谓词所定义(dngy)的条件相匹配的元素,并返回整个的条件相匹配的元素,并返回整个List中的最后一个匹配元素。中的最后一个匹配元素。第25页/共30页第二十六页,共30页。FindLastIndex搜索与指定谓词所定义的条件相匹配的元素,返回搜索与指定谓词所定义的条件相匹配的元素,返回List或它的或它的一部分中最后一个匹配项的从零开始的索引。一部分中最后一个匹配项的从零开始的索引。ForEach对对List的每个元素执行指定操作。的每个元素执行指定操作。IndexOf返回返回List或它的一部分中某个值的第一个匹配项的从零开始的或它的一部分中某个值的第一个匹配项的从零开始的索引。索引。Insert将元素插入将元素插入List的指定索引处。的指定索引处。InsertRange将集合中的某个元素插入将集合中的某个元素插入List的指定索引处。的指定索引处。LastIndexOf返回返回List或它的一部分中某个值的最后一个匹配项的从零开始或它的一部分中某个值的最后一个匹配项的从零开始的索引。的索引。Remove从从List中移除特定对象的第一个匹配项。中移除特定对象的第一个匹配项。RemoveAll移除与指定的谓词所定义的条件相匹配的所有元素。移除与指定的谓词所定义的条件相匹配的所有元素。RemoveAt移除移除List的指定索引处的元素。的指定索引处的元素。RemoveRange从从List中移除一定范围的元素。中移除一定范围的元素。Reverse将将List或它的一部分中元素的顺序或它的一部分中元素的顺序(shnx)反转。反转。Sort对对List或它的一部分中的元素进行排序。或它的一部分中的元素进行排序。ToArray将将List的元素复制到新数组中。的元素复制到新数组中。TrimExcess将容量设置为将容量设置为List中的实际元素数目(如果该数目小于某个阈中的实际元素数目(如果该数目小于某个阈值)。值)。第26页/共30页第二十七页,共30页。【例【例5.5】设计一个控制台应用程序,定义一个设计一个控制台应用程序,定义一个List对象对象(duxing),用于添加若干个学生的学号和姓名,输出后再插入一,用于添加若干个学生的学号和姓名,输出后再插入一个学生记录。个学生记录。usingSystem;namespaceProj5_5structStud/定义结构定义结构(jigu)类型类型publicintsno;/学号学号publicstringsname;/姓名姓名;classProgramstaticvoidMain(stringargs)inti;Listmyset=newList();Studs1=newStud();s1.sno=101;s1.sname=李明李明;myset.Add(s1);Studs2=newStud();s2.sno=103;s2.sname=王华王华;myset.Add(s2);第27页/共30页第二十八页,共30页。Studs3=newStud();s3.sno=108;s3.sname=张英张英;myset.Add(s3);Studs4=newStud();s4.sno=105;s4.sname=张伟张伟;myset.Add(s4);Console.WriteLine(元素序列元素序列:);Console.WriteLine(下标下标学号学号姓名姓名);i=0;foreach(Studstinmyset)Console.WriteLine(012,i,st.sno,st.sname);i+;Console.WriteLine(容量容量:0,myset.Capacity);Console.WriteLine(元素个数元素个数:0,myset.Count);Console.WriteLine(在索引在索引2处插入处插入(chr)一个元素一个元素);Studs5=newStud();s5.sno=106;s5.sname=陈兵陈兵;第28页/共30页第二十九页,共30页。myset.Insert(2,s5);Console.WriteLine(元素(yun s)序列:);Console.WriteLine(下标 学号 姓名);i=0;foreach(Stud st in myset)Console.WriteLine(0 1 2,i,st.sno,st.sname);i+;第29页/共30页第三十页,共30页。