您好,欢迎访问三七文档
第5章数组和集合5.1一维数组5.2二维数组5.3Array类5.4交错数组5.5ArrayList类5.6ListT类5.1一维数组5.1.1一维数组的定义定义一维数组的语法格式如下:数组类型[]数组名;例如,以下定义了3个一维数组,即整型数组a、双精度数组b和字符串数组c。int[]a;double[]b;string[]c;在定义数组后,必须对其进行初始化才能使用。初始化数组有两种方法:动态初始化和静态初始化。5.1.2一维数组的动态初始化动态初始化需要借助new运算符,为数组元素分配内存空间,并为数组元素赋初值,数值类型初始化为0,布尔类型初始化为false,字符串类型初始化为null。动态初始化数组的格式如下:数组类型[]数组名=new数据类型[n]{元素值0,元素值1,,元素值n-1};其中,“数组类型”是数组中数据元素的数据类型,n为“数组长度”,可以是整型常量或变量,后面一层大括号里为初始值部分。1.不给定初始值的情况如果不给出初始值部分,各元素取默认值。例如:int[]a=newint[10];该数组在内存中各数组元素均取默认值0。2.给定初始值的情况如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与“数组长度”相等。此时可以省略“数组长度”,因为后面的大括号中已列出了数组中的全部元素。例如:int[]a=newint[10]{1,2,3,4,5,6,7,8,9,10};或int[]a=newint[]{1,2,3,4,5,6,7,8,9,10};在这种情况下,不允许“数组长度”为变量,例如:intn=5;//定义变量nint[]myarr=newint[n]{1,2,3,4,5};//错误如果给出“数组长度”,则初始值的个数应与“数组长度”相等,否则出错。例如:int[]mya=newint[2]{1,2};//正确int[]mya=newint[2]{1,2,3};//错误int[]mya=newint[2]{1};//错误5.1.3一维数组的静态初始化静态初始化数组时,必须与数组定义结合在一起,否则会出错。静态初始化数组的格式如下:数据类型[]数组名={元素值0,元素值1,,元素值n-1};用这种方法对数组进行初始化时,无需说明数组元素的个数,只需按顺序列出数组中的全部元素即可,系统会自动计算并分配数组所需的内存空间。例如,以下是对整型数组myarr的静态初始化:int[]myarr={1,2,3,4,5};在这种情况下,不能将数组定义和静态初始化分开,例如,以下是错误的。int[]myarr;myarr={1,2,3,4,5};//错误的数组的静态初始化5.1.4访问一维数组中的元素访问一维数组中的某个元素:名称[下标或索引]。所有元素下标从0开始,到数组长度减1为止。例如,以下语句输出数组myarr的所有元素值:for(i=0;i5;i++)Console.Write({0},a[i]);Console.WriteLine();C#还提供foreach语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,以下代码定义一个名称为mya的数组,并用foreach语句循环访问该数组。int[]mya={1,2,3,4,5,6};foreach(intiinmya)System.Console.Write({0},i);Console.WriteLine();输出为:123456。5.1.5一组数组的越界若有如下语句定义并初始化数组ca:int[]ca=newint[10]{1,2,3,4,5,6,7,8,7,9,10};数组ca的合法下标为0~9,如果程序中使用ca[10]或ca[50],则超过了数组规定的下标,因此越界了。C#系统会提示以下出错信息。未处理的异常:Syatem.IndexOutOfRangeException:索引超出了数组界限。【例5.1】设计一个控制台应用程序,采用二分查找方法在给定的有序数组a中查找用户输入的值,并提示相应的查找结果。usingSystem;namespaceProj5_1{classProgram{staticvoidMain(string[]args){double[]a=newdouble[10]{0,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(low=high){mid=(low+high)/2;if(a[mid]==k){Console.WriteLine(a[{0}]={1},mid,k);return;//返回图5.3例5.1程序运行结果}elseif(a[mid]k)high=mid-1;elselow=mid+1;}Console.WriteLine(未找到{0},k);}}}5.2二维数组5.2.1二维数组的定义定义二维数组的语法格式如下:数组类型[,]数组名;其中,“数据类型”为C#中合法的数据类型,“数组名”为C#中合法的标识符。例如,以下语句定义了3个二维数组,即整型数组x、双精度数组y和字符串数组z。int[,]x;double[,]y;string[,]z;对于多维数组,可以作类似的推广,例如,以下语句定义了一个三维数组p。int[,,]p;5.2.2二维数组的动态初始化动态初始化二维数组的格式如下:数据类型[,]数组名=new数据类型[m][n]{{元素值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分别为行数和列数,即各维的长度,可以是整型常量或变量。1.不给定初始值的情况如果不给出初始值部分,各元素取默认值。例如:int[,]x=newint[2,3];该数组各数组元素均取默认值0。2.给定初始值的情况如果给出初始值部分,各元素取相应的初值,而且给出的初值个数与对应的“数组长度”相等。此时可以省略“数组长度”,因为后面的大括号中已列出了数组中的全部元素。例如:int[,]x=newint[2,3]{{1,2,3},{4,5,6}};或int[,]x=newint[,]{{1,2,3},{4,5,6}};5.2.3二维数组的静态初始化静态初始化数组时,必须与数组定义结合在一起,否则会出错。静态初始化数组的格式如下:数据类型[,]数组名={{元素值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}};5.2.4访问二维数组中的元素为了访问二维数组中的某个元素,需指定数组名称和数组中该元素的行下标和列下标。例如,以下语句输出数组myarr的所有元素值。for(i=0;i2;i++)for(j=0;j3;j++)Console.Write({0},myarr[i,j]);Console.WriteLine();对于多维数组,也可以使用foreach语句来循环访问每一个元素,例如。int[,]myb=newint[3,2]{{1,2},{3,4},{5,6}};foreach(intiinmyb)Console.Write({0},i);Console.WriteLine();其输出为:123456。【例5.2】设计一个控制台应用程序,输出九行杨辉三角形。usingSystem;namespaceProj5_2{classProgram{constintN=9;staticvoidMain(string[]args){inti,j;int[,]a=newint[N,N];for(i=0;iN;i++)//1列和对角线元素均为1{a[i,i]=1;a[i,0]=1;}for(i=2;iN;i++)//求第3~N行的元素值for(j=1;j=i-1;j++)a[i,j]=a[i-1,j-1]+a[i-1,j];for(i=0;iN;i++)//输出数序{for(j=0;j=i;j++)Console.Write({0,-2:d},a[i,j]);Console.WriteLine();}}}}5.3Array类Array类是所有数组类型的抽象基类型。属性说明Length获得一个32位整数,该整数表示Array的所有维数中元素的总数。LongLength获得一个64位整数,该整数表示Array的所有维数中元素的总数。Rank获取Array的秩(维数)。方法说明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对象中的元素进行排序。【例5.3】设计一个控制台应用程序,产生10个0~19的随机整数,对其递增排序并输出。usingSystem;namespaceProj5_3{classProgram{staticvoidMain(string[]args){inti,k;int[]myarr=newint[10];//定义一个一维数组Randomrandobj=newRandom();//定义一个随机对象for(i=myarr.GetLowerBound(0);i=myarr.GetUpperBound(0);i++){k=randobj.Next()%20;//返回一个0~19的正整数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();}}}5.4交错数组交错数组:元素为数组的数组,元素的维度和大小可以不同。多维数组:元素的维度和大小的均相同。5.4.1交错数组的定义和初始化以下语句定义了一个由3个元素组成的一维数组,其中每个元素都是
本文标题:第5章数组和集合.
链接地址:https://www.777doc.com/doc-2110512 .html