第7章常用数据结构与算法_第1页
第7章常用数据结构与算法_第2页
第7章常用数据结构与算法_第3页
第7章常用数据结构与算法_第4页
第7章常用数据结构与算法_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 常用数据结构2010-9-25数据结构和算法是程序设计的基石。数据结构和算法是程序设计的基石。本章重点讲述C#中的几个主要的数据结构类型:字符串、数组和枚举。2022-2-232C#程序设计实用教程7.1 字符串字符串字符串是应用程序和用户交互的主要方式之一。.NET提供了几个类来快速实现字符串操作,包括String、StringBuilder等。2022-2-233C#程序设计实用教程7.1.1 静态字符串静态字符串StringSystem.String是最常用的字符串操作类。下面从各个应用的角度对String类进行详细的介绍。比较字符串定位字符和字串格式化字符串分割字符串插入和填充

2、字符串删除和剪切字符串复制字符串更换字符串1.更改大小写2022-2-234C#程序设计实用教程1. 1. 比较字符串比较字符串1. 1. 比较字符串比较字符串比较字符串是指按照字典排序规则,判定两个字符的相对大小。在String类中,常用的比较字符串的方法包括 CompareCompareToCompareOrdinalEquals7.1.1 静态字符串静态字符串String(1 1)CompareCompare方法方法 Compare方法是String类的静态方法,用于全面比较两个字符串对象。 例: System.String strA=Hello; System.String strB=

3、World; Console.WriteLine(String.Compare(strA,strB);/-1 Console.WriteLine(String.Compare(strA,strA);/0 Console.WriteLine(String.Compare(strB,strA);/1 2022-2-236C#程序设计实用教程7.1.1 静态字符串静态字符串String(2 2)CompareToCompareTo方法方法 CompareTo方法将当前字符串对象与另一个对象做比较,其作用与Compare类似,返回值也相同。 CompareTo与Compare相比,区别在于: Comp

4、areTo不是静态方法,没有重载形式,只能按照大小写敏感方式比较两个整串。 例:System.String strA=Hello; System.String strB=World; Console.WriteLine(strA.CompareTo(strB);/-1 2022-2-237C#程序设计实用教程7.1.1 静态字符串静态字符串String(3 3)EqualsEquals方法方法 Equals方法用于方便地判定两个字符串是否相同,有两种重载形式: public bool Equals(string) public static bool Equals(string,string)

5、 如果两个字符串相等,Equals()返回值为True;否则,返回False。Console.WriteLine(String.Equals(strA,strB);/false Console.WriteLine(strA.Equals(strB);/false 2022-2-238C#程序设计实用教程7.1.1 静态字符串静态字符串String(4 4)比较运算符)比较运算符 String支持两个比较运算符“=”、“!=”,分别用于判定两个字符是否相等和不等,并区分大小写。下例中,使用“=”、“!=”对“Hello”和“World”进行比较。 /=和!= Console.WriteLine(

6、strA=strB); /false Console.WriteLine(strA!=strB); /true2022-2-239C#程序设计实用教程7.1.1 静态字符串静态字符串String2. 2. 定位字符和子串定位字符和子串定位子串是指在一个字符串寻找其中包含的子串或者某个字符,在String类中,常用的定位子串和字符的方法包括:StartWith/EndsWith、 IndexOf/LastIndexOf IndexOfAny/LastIndexOf。 2022-2-2310C#程序设计实用教程 2. 定位字符和子串定位字符和子串7.1.1 静态字符串静态字符串String(1 1

7、)StartWith/EndsWithStartWith/EndsWith方法方法 StartWith方法可以判定一个字符串对象是否以另一个子字符串开头,如果是返回True;否则返回False。其定义为: public bool StartsWith(string value) 其中,参数value即待判定的子字符串。 /StartWith Console.WriteLine(strA.StartsWith(He);/true Console.WriteLine(strA.StartsWith(She);/false另外,EndsWith方法可以判定一个字符是否以另一个子字符串结尾。 2022

8、-2-2311C#程序设计实用教程7.1.1 静态字符串静态字符串String(2 2)IndexOf/LastIndexOfIndexOf/LastIndexOf方法方法 IndexOf方法用于搜索一个字符串,某个特定的字符或子串第一次出现的位置,该方法区分大小写,并从字符串的首字符开始以计数。如果字符串中不包含这个字符或子串,则返回-1。定位字符: int IndexOf(char value) int IndexOf(char value,int startIndex) int IndexOf(char value,int startIndex,int count) 2022-2-231

9、2C#程序设计实用教程7.1.1 静态字符串静态字符串String定位子串: int IndexOf(string value) int IndexOf(string value,int startIndex) int IndexOf(string value,int startIndex,int count) 在上述重载形式中,其参数含义如下: Value:待定位的字符或者子串。 startIndex:在总串中开始搜索的起始位置。 Count:在总串中从起始位置开始搜索的字符数。 2022-2-2313C#程序设计实用教程7.1.1 静态字符串静态字符串String下例在“Hello”中寻找

10、字符“l”第一次出现的位置。 /Indexof Console.WriteLine(strA.IndexOf(l);/2 同IndexOf类似,LastIndexOf用于搜索在一个字符串中,某个特定的字符或子串最后一次出现的位置,其方法定义和返回值都与IndexOf相同。2022-2-2314C#程序设计实用教程7.1.1 静态字符串静态字符串String(3 3)IndexOfAny/LastIndexOfAny IndexOfAny/LastIndexOfAny IndexOfAny方法功能同IndexOf类似,区别在于,可以搜索在一个字符串中,出现在一个字符数组中的任意字符第一次出现的位

11、置。2022-2-2315C#程序设计实用教程7.1.1 静态字符串静态字符串String下例在“Hello”中寻找字符“l”第一次和最后一次出现的位置。 char anyOf=H,e,l; Console.WriteLine(strA.IndexOfAny(anyOf); /0 Console.WriteLine(strA.LastIndexOfAny(anyOf); /3 同IndexOfAny类似,LastIndexOfAny用于搜索在一个字符串中,出现在一个字符数组中任意字符最后一次出现的位置。 2022-2-2316C#程序设计实用教程7.1.1 静态字符串静态字符串String3.

12、 3. 格式化字符串格式化字符串Format方法用于创建格式化的字符串以及连接多个字符串对象。Foramt方法也有多个重载形式,最常用的为: public static string Format(string format,params object args); 其中,参数format用于指定返回字符串的格式,而args为一系列变量参数。 2022-2-2317C#程序设计实用教程3. 格式化字符串格式化字符串7.1.1 静态字符串静态字符串StringnewStr=; newStr=String.Format(0,1!,strA,strB); Console.WriteLine(newS

13、tr);/Hello,World! 在format参数中包含一些用大括号括起来的数字,如0、1,这些数字分别一一对应于args参数数组中的变量。在生成结果字符串时,将使用这些变量代替i。需要说明的是,这些变量并不要求必须为String类型。 2022-2-2318C#程序设计实用教程7.1.1 静态字符串静态字符串String例如,想要输出一定格式的时间字符串,便可以使用Format方法,如下面代码所示。 newStr=String.Format(CurrentTime=0:yyyy-MM-dd,System.DateTime.Now); Console.WriteLine(newStr);/

14、形如:2008-09-19 其中,格式字符串“yyyy-MM-dd”指定返回时间的格式形如“2008-09-19”。 2022-2-2319C#程序设计实用教程7.1.1 静态字符串静态字符串String4. 4. 连接字符串连接字符串(1 1) Concat Concat方法方法 Concat方法用于连接两个或多个字符串newStr=; newStr=String.Concat(strA, ,strB); Console.WriteLine(newStr);/“Hello World 2022-2-2320C#程序设计实用教程4. 连接字符串连接字符串7.1.1 静态字符串静态字符串Stri

15、ng(2 2)JoinJoin方法方法 Join方法利用一个字符数组和一个分隔符串构造新的字符串。常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开。Join方法的常用形式为: public static string Join(string separator,string values); 其中,参数separator为指定的分隔符,而values用于指定所要连接的多个字符串数组。2022-2-2321C#程序设计实用教程7.1.1 静态字符串静态字符串String下例用“”分隔符把“Hello”和“World”连起来。 /Join newStr=; String strArr=st

16、rA,strB; newStr=String.Join(,strArr); Console.WriteLine(newStr);/HelloWorld 2022-2-2322C#程序设计实用教程7.1.1 静态字符串静态字符串String(3 3)连接运算符)连接运算符“+ +”String支持连接运算符“+”,可以方便地连接多个字符串。例如,下例把“Hello”和“World”连接起来。 /+ newStr=; newStr=strA+strB; Console.WriteLine(newStr);/HelloWorld 2022-2-2323C#程序设计实用教程7.1.1 静态字符串静态字

17、符串String5. 5. 分隔字符串分隔字符串使用Split方法可以把一个整串,按照某个分隔符,分裂成一系列小的字符串。例如,把整串,按照某个分隔符,分裂成一系列小的字符串。例如,把整串“HelloWorld”按照字符“”进行分裂,可以得到3个小的字符串,即“Hello”、“”(空串)和“World”。Split方法最常用的形式为: public string Split(params char separator); 其中,参数separator数组包含分隔符。2022-2-2324C#程序设计实用教程7.1.1 静态字符串静态字符串String/Split newStr=HelloWor

18、ld; char separator=; String splitStrings=new String100; splitStrings=newStr.Split(separator); int i=0; while(isplitStrings.Length) Console.WriteLine(item0:1,i,splitStringsi); i+; 输出结果如下: Item0:Hello Item1: Item2:World 2022-2-2325C#程序设计实用教程7.1.1 静态字符串静态字符串String6. 6. 插入和填充字符串插入和填充字符串String类包含了在一个字符串中

19、插入新元素的方法,可以用Insert方法在任意插入任意字符。 Insert方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串。Insert方法最常用的为: public string Insert(int startIndex,string value); 其中,参数startIndex用于指定所要插入的位置,从开始索引;value指定所要插入的字符串。2022-2-2326C#程序设计实用教程7.1.1 静态字符串静态字符串String下例中,在“Hello”的字符“H”后面插入“World”,构造一个串“HWorldello”。 newStr=; newStr=strA.I

20、nsert(1,strB); Console.WriteLine(newStr);/HWorldello 2022-2-2327C#程序设计实用教程7.1.1 静态字符串静态字符串String7. 7. 删除和剪切字符串删除和剪切字符串String类包含了删除一个字符串的方法。可以用Remove方法在任意位置删除任意长度的字符。也可以使用Trim/TrimeEnd/TrimStart方法剪切掉字符串中的一些特定字符。 2022-2-2328C#程序设计实用教程7.1.1 静态字符串静态字符串String(1 1)RemoveRemove方法方法 Remove方法从一个字符串的指定位置开始,删除

21、指定数量的字符。最常用的形式为: public string Remove(int startIndex,int count); 其中,参数startIndex用于指定开始删除的位置,从开始索引;count指定删除的字符数量。下例中,把“Hello”中的“ell”删掉。 /Remove newStr=; newStr=strA.Remove(1,3); Console.WriteLine(newStr);/Ho 2022-2-2329C#程序设计实用教程7.1.1 静态字符串静态字符串String(2 2)Trim/TrimStart/TrimEndTrim/TrimStart/TrimEnd

22、方法方法 若想把一个字符串首尾处的一些特殊字符剪切掉,如去掉一个字符串首尾的空格等,可以使用String的Trim()方法。其形式如下: public string Trim() public string Trim(params char trimChars) 其中,参数trimChars数组包含了指定要去掉的字符,如果缺省,则删除空格符号。下例中,实现了对“Hello#$”的净化,去掉首尾的特殊符号。 2022-2-2330C#程序设计实用教程7.1.1 静态字符串静态字符串String/Trim newStr=; char trimChars=,#,$, ; String strC=He

23、llo# $; newStr=strC.Trim(trimChars); Console.WriteLine(newStr);/Hello 另外,同Trim类似,TrimStart和TrimEnd分别剪切掉一个字符串开头和结尾处的特殊字符。 2022-2-2331C#程序设计实用教程7.1.1 静态字符串静态字符串String8. 8. 复制字符串复制字符串String类包括了复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作。 2022-2-2332C#程序设计实用教程7.1.1 静态字符串静态字符串String(1 1)CopyCopy方法方法 若想把一个字符串

24、复制到另一个字符数组中,可以使用String的静态方法Copy来实现,其形式为: public string Copy(string str); 其中,参数str为需要复制的源字符串,方法返回目标字符串。下例中,把strA字符串“Hello”复制到newStr中。 /Copy newStr=; newStr=String.Copy(strA); Console.WriteLine(newStr);/Hello 2022-2-2333C#程序设计实用教程7.1.1 静态字符串静态字符串String(2 2)CopyToCopyTo方法方法 CopyTo方法可以实现Copy同样的功能,但功能更为丰

25、富,可以复制字符串的一部分到一个字符数组中。其形式为: public void CopyTo(int sourceIndex,char destination,int destinationIndex,int count); 其中,参数sourceIndex为需要复制的字符起始位置,destination为目标字符数组,destinationIndex指定目标数组中的开始存放位置,而count指定要复制的字符个数。2022-2-2334C#程序设计实用教程7.1.1 静态字符串静态字符串String下例中,把strA字符串“Hello”中的“ell”复制到newCharArr中,并在newCh

26、arArr中从第2个元素开始存放。 /CopyTo char newCharArr=new char100; strA.CopyTo(2,newCharArr,0,3); Console.WriteLine(newCharArr); /”llo 2022-2-2335C#程序设计实用教程7.1.1 静态字符串静态字符串String9. 9. 替换字符串替换字符串想要替换一个字符串中的某些特定字符或者某个子串,可以使用Replace方法来实现,其形式为: public string Replace(char oldChar, char newChar); public string Replac

27、e(string oldValue, string newValue); 其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串。下例把“Hello”通过替换变为“Hero”。 /Replace newStr=strA.Replace(ll,r); Console.WriteLine(newStr);/Hero 2022-2-2336C#程序设计实用教程7.1.1 静态字符串静态字符串String10. 10. 更改大小写更改大小写String提供了方便转换字符串中所有字符大小写的方法ToUpper和ToLower。下例首先把

28、“Hello”转换为“HELLO”,然后再变为小写形式“hello”。 /ToUpper|ToLower newStr=strA.ToUpper(); Console.WriteLine(newStr);/HELLO newStr=strA.ToLower(); Console.WriteLine(newStr);/hello 2022-2-2337C#程序设计实用教程7.1.1 静态字符串静态字符串String11. String11. String小结小结本节介绍了最常用的String类,并从比较、定位子串、格式化、连接、分裂、插入、删除、复制、大小写转换10个方面介绍了其方法和应用。 之

29、所以称String对象为静态串,是因为一旦定义一个String对象,就是不可改变的。在使用其方法(如插入、删除操作)时,都要在内存中创建一个新的String对象,而不是在原对象的基础上进行修改,这就需要开辟新的内存空间。如果需要经常进行串修改操作,使用String类无疑是非常耗费资源的,这时需要使用StringBuilder类。2022-2-2338C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder与String类相比,System.Text.StringBuilder类可以实现动态字符串。此外,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新

30、的内存空间,而是直接在原StringBuilder对象的基础上进行修改。2022-2-2339C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder1. 1. 声明声明StringBuilderStringBuilder串串StringBuilder类位于命名空间System.Text中,使用时,可以在文件头通过using语句引入该命名空间: using System.Text; 声明StringBuilder对象需要使用new关键字,并可以对其进行初始化。如以下语句声明了一个StringBuilder对象myStringBuilder,并初始化为“Hello”: S

31、tringBuilder myStringBuilder=new StringBuilder(Hello); 2022-2-2340C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder2. 2. 设置设置StringBuilderStringBuilder容量容量StringBuilder对象为动态字符串,可以对其设置好的字符数量进行扩展。另外,还可以设置一个最大长度,这个最大长度称为该StringBuilder对象的容量(Capacity)。2022-2-2341C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder有两种方式来设置一个S

32、tringBuilder对象的容量。(1 1)使用构造函数)使用构造函数StringBuilder构造函数可以接受容量参数,例如,下面声明一个StringBuilder对象sb2,并设置其容量为100。/使用构造函数StringBuilder sb2=new StringBuilder(Hello,100); 2022-2-2342C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder(2 2)使用)使用CapacityCapacity读读/ /写属性写属性Capacity属性指定StringBuilder对象的容量。例如下面语句首先一个StringBuilder对象

33、sb3,然后利用Capacity属性设置其容量为100。/使用Capacity属性StringBuilder sb3=new StringBuilder(Hello); sb3.Capacity=100; 2022-2-2343C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder3. 3. 追加操作追加操作追加一个StringBuilder是指将新的字符串添加到当前StringBuilder字符串的结尾处,可以使用Append和AppendFormat来实现这个功能。(1 1)AppendAppend方法方法下例中,把一个StringBuilder字符串“Hello

34、”追加为“Hello World!”。/Append StringBuilder sb4=new StringBuilder(Hello); sb4.Append( World!); Console.WriteLine(sb4); /Hello World! 2022-2-2344C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder(2 2)AppendFormatAppendFormat方法方法AppendFormat方法可以实现对追加部分字符串的格式化,可以定义变量的格式,并将格式化后的字符串追加在StringBuilder后面。2022-2-2345C#程序设

35、计实用教程 7.1.2 动态字符串动态字符串StringBuilder4. 4. 插入操作插入操作StringBuilder的插入操作是指将新的字符串插入到当前的StringBuilder字符串的指定位置,如“Hello”变为“Heeeello”。可以使用StringBuilder类的Insert方法来实现这个功能,常用形式为:public StringBuilder Insert(int index, object value); 其中,参数index指定所要插入的位置,并从0开始索引,如index=1,则会在原字符串的第2个字符之前进行插入操作;同Append一样,参数value并不仅是只

36、可取字符串类型。2022-2-2346C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder下例中,把一个StringBuilder字符串“Hello”通过插入操作修改为“Heeeello”。/Insert StringBuilder sb6=new StringBuilder(Hello); sb6.Insert(2,eee); Console.WriteLine(sb6);/Heeeello 2022-2-2347C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder5. 5. 删除操作删除操作StringBuilder的删除操作可以从当

37、前StringBuilder字符串的指定位置,删除一定数量的字符,例如把“Heeeello”变为“Hello”。可以使用StringBuilder类的Remove方法来实现这个功能,常用形式为:public StringBuilder Remove(int startIndex, int length); 其中,参数startIndex指定所要删除的起始位置,其含义同Insert中的index相同;length参数指定所要删除的字符数量。2022-2-2348C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder下例中,把一个StringBuilder字符串“Heee

38、ello”通过删除操作修改为“Hello”。/Remove StringBuilder sb7=new StringBuilder(Heeello); sb7.Remove(2,2);/在”He”后面删除个字符Console.WriteLine(sb7);/Hello! 2022-2-2349C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder6. 6. 替换操作替换操作StringBuilder使用Replace方法来实现替换操作,例如把“Hello”变为“Hero”,就需要使用替换操作,将“ll”替换为“r”。这同String类的Replace方法非常类似,其常

39、用形式包括:public StringBuilder Replace(char oldChar, char newChar); public StringBuilder Replace(string oldValue, string newValue); 其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串。2022-2-2350C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder下例把“Hello”通过替换为“Hero”。/Replace StringBuilder sb8=new String

40、Builder(Hello); sb8=sb8.Replace(ll,r); Console.WriteLine(sb8);/Hero 2022-2-2351C#程序设计实用教程 7.1.2 动态字符串动态字符串StringBuilder7. 7. 与与StringString比较比较可以看出StringBuilder与String在许多操作上是非常相似的。而在操作性能和内存效率方面,StringBuilder要比String好得多。而另一方面,String类提供了更多的方法,可以使开发能够更快地实现应用。在两者的选择上,如果应用对于系统性能、内存要求比较严格,以及经常处理大规模的字符串,推荐

41、使用StringBuilder对象;否则,可以选择使用String。2022-2-2352C#程序设计实用教程 7.2 数组数组数组的作用非常强大,数据也是基本数据结构之一,是编程实现过程中必不可少的要素之一。2022-2-2353C#程序设计实用教程 7.2.1 数组的概念数组的概念数组(Array)是一种数据结构,一个数组由若干个类型相同的数组元素的变量,这些变量可以通过一个数组名和数组下标(或者称为索引)来访问。C#中的数组下标是从零开始,数组中的所在元素都具有相同的类型。在数组中,每一个成员叫做数组元素,数组元素的类型称为数组类型,数组类型可以是C#中定义的任意类型,其中也包括数组类型

42、本身。如果一个数组的类型不是数组类型,称之为一维数组。如果数组元素的类型是数组类型,就称之为多维数组,也就是说,数组定义可以嵌套。2022-2-2354C#程序设计实用教程 7.2.1 数组的概念数组的概念无论是一维数组还是多维数组,每个维的下标都是从0开始,结束于这个维的数组长度减1。数组被用于各种目的,因为它提供了一种高效、方便的手段将相同类型的变量合成一组。例如,可以用数组保存一个月中每天的温度记录,货物平均价格的记录。数组的主要优点是,通过这样的一种方式组织数据使得数据容易被操纵。2022-2-2355C#程序设计实用教程 7.2.1 数组的概念数组的概念在实际使用数据的过程中,一般是

43、先确定数据类型,然后根据实际情况确定数组的长度。C#中的数组是由System.Array类派生而来的引用对象,因此可以使用Array类的方法来进行各种操作。2022-2-2356C#程序设计实用教程7.2.2 System.Array类类System.Array类是C#中各种数组的基类,其常用属性和方法的简单说明如表7-1所示。2022-2-2357C#程序设计实用教程7.2.3 一维数组一维数组1. 1. 一维数组的定义一维数组的定义数据在使用前使用先进行定义。定义一维数组的格式如下:数据类型数组名:例如:char charArr; /定义了一个字符型的一维数组int intArr; /定义

44、了一个整型一维数组string strArr; /定义了一个字符串类型一维数组初始化数组有两种方法,即动态初始化和静态初始化。2022-2-2358C#程序设计实用教程7.2.3 一维数组一维数组2. 2. 动态初始化动态初始化动态初始化需要借助new运算符,为数组元素分配内存空间,并为数据元素赋初始值。动态初始化数组的格式如下:数组名=new 数据类型数组长度;在C#中,可以将数组定义与动态初始化合在一起,格式如下:数据类型数组名=new 数据类型数组长度; int intArr=new int5; int intArr=new int53,6,9,2,10; int intArr=new

45、int3,6,9,2,10;2022-2-2359C#程序设计实用教程7.2.3 一维数组一维数组3. 3. 静态初始化静态初始化静态初始化数组时,必须与数组定义结合在一起,否则程序就会报错。静态初始化数组的格式如下:数据类型 数据名=元素1,元素2;例如:int intArr=3,6,9,2,10;stringstr=“English”,”Maths”,”Computer”,”Chinese”;2022-2-2360C#程序设计实用教程7.2.3 一维数组一维数组4. 4. 关于一维数据初始化的几点说明关于一维数据初始化的几点说明(1 1)动态初始化数组时,可以把定义与初始化分开在不同的语句

46、中者,例如:int intArr; /定义数组intArr=new int5; /动态初始化,初始化元素的值均为0或者intArr=new int5 3,6,9,2,10;2022-2-2361C#程序设计实用教程7.2.3 一维数组一维数组4. 4. 关于一维数据初始化的几点说明关于一维数据初始化的几点说明(2 2)静态初始化数组必须与数组结合在一条语句中,否则程序就会出错。 int intArr=3,6,9,2,10;(3 3)在数组初始化语句中,如果大括号中已明确列出了数组中的元素,即确定了元素个数,则表示数组元素个数的数值(即方括号中的数值)必须是常量,并且该数值必须与数组元素个数一致

47、。 int intArr=new int53,6,9,2,10;2022-2-2362C#程序设计实用教程7.2.3 一维数组一维数组5. 5. 访问一维数组中的元素访问一维数组中的元素在C#中是通过数组名和下标值来访问数组元素的。在访问数组元素时,其下标可以是一个整型常量或整型表达式。例如,下面的数组元素的下标都是合法的:intArr3,strArr0,intArrj,strArr2*i-12022-2-2363C#程序设计实用教程7.2.3 一维数组一维数组【例例7-17-1】给定8个数:8、7、6、5、4、3、2、1,将这些数存在数组中,并将其按从小到大的顺序输出。(1)定义一个数组,如

48、数组名为QueArrey,并将其用给定的数进行初始化。(2)遍历数组,将8个数中最小的数找出来,与第个位置上的数对调。其方法是:先找出存放最小的数组元素的下标,将其存放在变量temp中,然后将QueArray0和QueArraytemp中的数对调,使QueArray0中存放的是个数中最小的数。(3)再从第个数到第个数中找出最小的数,并按步骤(2)中的方法,将最小的数与第个位置上的数对调,使QueArray1中存放的是第2小的数。(4)依次类推,完成整个排序过程,并输出结果。2022-2-2364C#程序设计实用教程7.2.3 一维数组一维数组程序代码如下:using System;namesp

49、ace ArraySort class ArraySort static void Main() int i, j, temp, m; int QueArray = new int 8, 7, 6, 5, 4, 3, 2, 1 ; for (j = 0; j QueArray.Length; j+) temp = j;2022-2-2365C#程序设计实用教程7.2.3 一维数组一维数组 for (i = j + 1; i QueArray.Length; i+)/从j的下一个元素起开始比较 if(QueArrayiQueArraytemp)/比较数组元素 temp = i; /使temp为较

50、小的数的下标 if(temp!=j) /*交换QueArraytemp和QueArrayj的值, 从而可以从所比较的数组元素中获得较小 的娄赋给QueArrayj*/ m = QueArrayj; QueArrayj=QueArraytemp; QueArraytemp=m; 2022-2-2366C#程序设计实用教程7.2.3 一维数组一维数组Console.WriteLine(输出排序后的结果:); for(j=0;jQueArray.Length;j+) Console.Write(0 ,QueArrayj); 执行该程序后,程序输出结果如下:1 2 3 4 5 6 7 82022-2-

51、2367C#程序设计实用教程7.2.3 一维数组一维数组注意:注意:(1)除了可以显式地指出数组长度之外,更好的做法是使用System.Array类的Length属性,数组的Length用于获取数组所包含的全部元素的个数。(2)上面所用的排序方法是一种常规的方法,在C#中,对数组进行排序还有更高效的方法;可以使用Array类的Sort方法完成这个功能。Sort方法有多种的重载方法,常用的形式如下:public static void Sort(Array array);2022-2-2368C#程序设计实用教程7.2.3 一维数组一维数组【例例7-27-2】给定8个数:8、7、6、5、4、3、

52、2、1,将这些数存在数组中,利用Array类的Sort方法将其按从小到大的顺序输出。using System;namespace SortArray class SortArray static void Main() int QueArray = new int 8, 7, 6, 5, 4, 3, 2, 1 ;/定义数组 /输出原始数组 Console.WriteLine(原始数组:); for(int i=0;i,QueArrayi); Console.WriteLine();/进行换行 Array.Sort(QueArray); /对数组排序 /输出排序后的数组 Console.Writ

53、eLine(排序以后的数组:); for (int i = 0; i , QueArrayi); 2022-2-2369C#程序设计实用教程7.2.3 一维数组一维数组 for(int i=0;i,QueArrayi); Console.WriteLine();/进行换行 Array.Sort(QueArray); /对数组排序 /输出排序后的数组 Console.WriteLine(排序以后的数组:); for (int i = 0; i , QueArrayi); 2022-2-2370C#程序设计实用教程7.2.3 一维数组一维数组6. 6. 查找元素查找元素在数组中查找元素,一是从整个

54、数组中寻找到与给定值相同的元素来,可以使用Array类的BinarySearch方法完成这个功能。二是判定数组中是否含有一个特定的元素,可以用Contains方法来实现。(1)BinarySearch方法BinarySearch使用二进制搜索算法在一维的排序Array中搜索算法,注意必须是已经排序的数组。如果找到给定的值,则返回其下标;否则,返回一个负整数。常用形式如下:public static int BinarySearch(Array array,object value);其中,参数array为待搜索的数组,value为待寻找的元素值。2022-2-2371C#程序设计实用教程7.2

55、.3 一维数组一维数组【例例7-37-3】给定8个数:8、7、6、5、4、3、2、1,将这些数存在数组中,利用Array类的BinarySearch方法返回其中的元素5的下标。using System;namespace BinarySearch class BinarySearch static void Main() /定义数组 int myArr=8,7,6,5,4,3,2,1; /对数组排序 Array.Sort(myArr); 2022-2-2372C#程序设计实用教程7.2.3 一维数组一维数组 /搜索 int target=5; int result=Array.BinarySe

56、arch(myArr,target); /4 Console.WriteLine(0的下标为1,target,result);/4 Console.ReadLine(); 2022-2-2373C#程序设计实用教程7.2.3 一维数组一维数组 (2)Contains方法Contains方法可以确定某个特定值的否包含在数组中,返回一个bool值。Array类的这个方法实际上是对IList接口中方法的实现,常用形式如下:bool IList.Contains(object value);其中,参数value代表所要验证的元素值。2022-2-2374C#程序设计实用教程7.2.3 一维数组一维数组

57、7. 7. 把数组作为参数把数组作为参数将数组作为参数传递可以将初始化的数组传递给方法。例如:int myArray=new int1,3,5,7,9;PrintArray(myArray);也可以直接将一个初始化过的数组作为参数进行传递。例如下面的代码等价于上面数组传递。PrintArray(new int1,3,5,7,9);2022-2-2375C#程序设计实用教程7.2.3 一维数组一维数组【例例7-57-5】演示把一个初始化后字符串数组作为参数传递给PrintArray方法。using System;namespace Parameter class Parameter static

58、 void PrintArray(string strArr) for (int i = 0; i strArr.Length; i+) Console.Write(0, strArri); Console.WriteLine(); 2022-2-2376C#程序设计实用教程7.2.3 一维数组一维数组 static void Main() string WeekDays = new string星期日,星期一, 星期二,星期三,星期四,星期五,星期六; PrintArray(WeekDays);/把数组作为参数 在上面的例子中,主函数Main把定义好的数组WeekDays作为参数传递给方法P

59、rintArray,PrintArray方法把接收到的数组元素一个个地打印出来。2022-2-2377C#程序设计实用教程7.2.4二维数组二维数组在C#中,多维数组可看作是数组的数组,即高维数组。多维数组中的每一个元素本身也是一个低维数组,因此多维数组的定义、初始化和元素访问与一维数组都非常相似。在多维数组中,二维数组是最简单也是最常用的数组,本节主要介绍二维数组。2022-2-2378C#程序设计实用教程7.2.4二维数组二维数组. . 二维数组的定义二维数组的定义二维数组的一般语法格式如下:数据类型, 数组名例如:char, charArr; /定义一个字符型二维数组int, intAr

60、r; /定义一个整型二维数组2022-2-2379C#程序设计实用教程7.2.4二维数组二维数组定义多维数组与二维数组的方法相同,只是要根据定义数组的维数确定方括号中的逗号的个数,一般定义一个n(n2)维数组,需要的逗号个数是n-1。例如,下面语句定义的是一个三维数组:String, stringArr; /定义一个字符串型三维数组2022-2-2380C#程序设计实用教程7.2.4二维数组二维数组2. 2. 二维数组的初始化二维数组的初始化二维数组包括两种初始化方法,即:动态初始化和静态初始化。动态初始化二维数组的格式如下:数组名=new 数据类型数组长度,数组长度2;其中,数组长度1和数组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论