C井常用数据类型的用法.ppt_第1页
C井常用数据类型的用法.ppt_第2页
C井常用数据类型的用法.ppt_第3页
C井常用数据类型的用法.ppt_第4页
C井常用数据类型的用法.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第3章 常用数据类型的用法,3.1 字符串 3.2 数组 3.3 枚举 3.4 泛型 3.5 泛型集合 3.6 日期与时间处理 3.7 数学运算 3.8 随机数,3.1 字符串,String类(string) : string myString = “some text“; string s2 = new string(a,2); /结果为aa String.Empty 表示空字符串 String类的表示方法: string str = “C:testfirst.cs“ string str = “C:testfirst.cs“ 取字符串中的某个字符的方法: string myString = “some text“; char chFirst = myString2; /结果为m,3.1 字符串,字符串比较方法 string.Compare(string s1,string s2) 如果s1大于s2,结果为1; 如果s1等于s2,结果为0; 如果s1小于s2,结果为-1。 string.Compare(string s1,string s2,bool ignoreCase) ignoreCase确定是否区分大小写 比较两个字符串是否相等,使用: Equals方法 string str1 = “a“, str2 = “A“; bool result; result = str1.Equals(str2); / false result = String.Equals(str1, str1); / true,3.1 字符串,字符串查找 Contains方法:用于查找一个字符串中是否包含指定的子字符串。语法为: public bool Contains( string value ) 例如:string str1 = “this is a string.“; bool b=str1.Contains(“is“ ); IndexOf方法:求某个字符或者子串在字符串中出现的位置。两种最常用的重载形式: public int IndexOf(string s ) public int IndexOf(string s, int startIndex ) LastIndexOf方法:LastIndexOf方法的用法与IndexOf方法相同,查找最后一次出现的位置。,3.1 字符串,例如:string str1 = “this is a string.“; Console.WriteLine(str1.IndexOf(“is“); /结果为2(注意序号从0开始) Console.WriteLine(str1.LastIndexOf(“is“); /结果为5 IndexOfAny方法:查找某个字符串中是否包含某些字符(多个不同的字符)。 常用语法:public int IndexOfAny( char anyOf ) 例如: string s1 = “123abc123abc123“; char c = a, b, 5, 8 ; int x = s1.IndexOfAny(c); /x结果为3,3.1 字符串,截取字符串 Substring(int startIndex,int count) 截取字符串从startIndex位开始,截取长度为count的字符串 例如: string str=“abc123”; string ss = str.Substring(1,4); Console.WriteLine(ss);/bc12,3.1 字符串,删除指定数量的字符 Remove(int startIndex,int count) 例如:string str1 = “this is a string.“ Console.WriteLine(str1.Remove(1,2); /结果为ts is a string 字符串替换 Replace (string oldStr,string newStr) 例如:string str1 = “this is a string.“ Console.WriteLine(str1.Replace(“is“,“xy“); /结果为thxy xy a string,3.1 字符串,插入字符串 例如:string s1 = “abcdabcd“; string s2 = s1.Insert(2, “12“);/结果为“ab12cdabcd“ 从字符串开头或结尾删除指定的字符 :利用TrimStart删除字符串首部空格,利用TrimEnd删除字符串尾部空格,利用Trim删除字符串首部和尾部空格。 例如:string s1 = “this is a book“; string s2 = “that is a pen“; string s3 = “is a pen “; Console.WriteLine(s1.TrimStart(); /删除首部空格 Console.WriteLine(s2.TrimEnd(); /删除尾部空格 Console.WriteLine(s3.Trim(); /删除首部和尾部空格,3.1 字符串,字符串的合并与拆分 Join方法:在数组的每个元素之间串联指定的分隔符,从而产生单个串联的字符串。 语法为: public static string Join( string separator, string value ) Split方法:将字符串按照指定的一个或多个字符进行分离,从而得到一个字符串数组。 常用语法为: public string Split( params char separator ),字符串的合并和拆分举例,例如: string sArray1 = “123“, “456“, “abc“ ; string s1 = string.Join(“,“, sArray1); /结果为“123,456,abc“ string sArray2 = s1.Split(,); /sArray2得到的结果与sArray1相同 string s2 = “abc 12;34,56“; string sArray3 = s2.Split(, ;, ); /分隔符为逗号、分号、空格 Console.WriteLine(string.Join(Environment.NewLine,sArray3); 输出结果: abc 12 34 56,3.1 字符串,ToUpper大写 ToLower小写 例如: string s1 = “This is a string“; string s2 = s1.ToUpper( ); /s2结果为THIS IS A STRING string s3 = Console.ReadLine( ); if (s3.ToLower( ) = “yes“) Console.WriteLine(“OK“); ,3.2 String和StringBuilder,String类实际上表示的是一系列不可变的字符。说其实例是“不可变的”,是因为无法直接修改给该字符串分配的堆中的字符串。例如,在myString的后面接上另一个字符串: myString += “ and a bit more“; 其实际操作并不是在原来myString所占内存空间的后面直接附加上第二个字符串,而是返回一个新String实例,即重新为新字符串分配内存空间。 StringBuilder类位于System.Text名称空间下,使用StringBuilder类每次重新生成新字符串时不是再生成一个新实例,而是直接在原来字符串占用的内存空间上进行处理,而且它可以动态的分配占用的内存空间大小。,StringBuilder类用法举例,【例3-1】StringBuilder类的基本用法。 using System; using System.Text; namespace StringBuilderExample class Program public static void Main( ) StringBuilder sb = new StringBuilder( ); sb.Append(“string1“); sb.AppendLine(“string2“);/Appends the default line terminator to the end of sb sb.Append(“string3“); string s = sb.ToString( ); Console.WriteLine(s); Console.ReadLine( ); ,3.3 数组,数组用于存储同一种类型的数据。 数组是一种引用类型,而不是值类型。 数组是按照数组名、数据元素的类型和维数来描述的。 C#中可以有一维数组、多维数组、交错数组。 1.数组的声明与初始化 声明数组时,既可以一开始就指定数组元素的个数,也可以一开始不指定元素个数,而是在使用数组元素前动态地指定元素个数。 例如: int a = new int30; string mystring = “first“,“second“,“third“;,数组的声明语法举例,数组的秩与数组长度,2.数组的秩与数组长度 数组的秩(rank)是指数组的维数,例如一维数组秩为1,二维数组秩为2。 数组长度是指数组中所有元素的个数。例如: int a = new int10; /数组长度为10 int, b = new int3, 5; /数组长度为3*5=15,其中第0维长度为3,第1维长度为5 a.Rank = 1; b.Rank = 2; a.Length = 10; b.Length = 15; b.GetLength(0) = 3; /获取数组b的第0维长度 b.GetLength(1) = 5; /获取数组b的第1维长度,数组用法举例,【例3-2】编写一个控制台应用程序,定义一个二维数组,分别输出数组的秩、数组长度以及数组中的每个元素值。,namespace ConsoleApplication2 class arrayTest static void Main(string args) int, array = new int3, 2 1, 2 , 3, 4 , 5, 6 ; Console.WriteLine(array.Rank); Console.WriteLine(array.Length); foreach (int i in array) Console.WriteLine(i); Console.ReadKey(); ,数组,3.一维数组 在C#中,数组的下标默认是从0开始索引的。 Length属性表示数组的长度。 4.多维数组 多维数组指维数大于1的数组,常用的是二维数组和三维数组。 C#语言支持两种类型的二维数组,一种是二维矩形数组,另一种是二维交错数组。 对于二维矩形数组,数组中的每一行都有相同的列数。 例如: int, n2 = new int, 1, 2, 3, 4, 5, 6 ;,数组,5.交错数组 交错数组相当于一维数组的每一个元素又是一个数组,也可以把交错数组称为“数组的数组”。 例如: int n1 = new int2 new int 2,4,6, new int 1,3,5,7,9 ; 交错数组的每一个元素既可以是一维数组,也可以是多维数组。,交错数组用法举例,【例3-3】交错数组的用法。 static void Main(string args) int divisors1To4 = new int 1, new int 1,2, new int 1,3, new int 1,2,4; foreach(int divisorOfInt in divisors1To4) foreach(int divisor in divisorOfInt) Console.WriteLine(divisor); ,数组声明创建举例,int numbers; / declare numbers as an int array of any size numbers = new int10; / numbers is a 10-element array string, names; /二维数组 names = new string3,2; /32二维数组 string, names; /三维数组 names = new string2,3,4; /234三维数组 byte scores = new byte5; / 交错数组 for (int x = 0; x scores.Length; x+) scoresx = new byte4; ,数组声明创建和初始化举例,/ 一维数组 int numbers1 = new int10 10, 9, 8, 7, 6, 5, 4, 3, 2, 1; int numbers1 = new int 10, 9, 8, 7, 6, 5, 4, 3, 2, 1; int numbers1 = 10, 9, 8, 7, 6, 5, 4, 3, 2, 1; /二维数组,3行4列 int, numbers2 = new int3, 4 1,2,3,4, 5,6,7,8, 9,10,11,12; int, numbers2 = new int, 1,2,3,4, 5,6,7,8, 9,10,11,12; int, numbers2 = 1,2,3,4,5,6,7,8, 9,10,11,12; /三维数组,221 int, numbers3 = new int2, 2,1 1,2,3,4 ; int, numbers3 = new int, 1,2,3,4 ; int, numbers3 = 1,2,3,4 ;,交错数组声明创建和初始化举例,/ 交错数组,2行 string str1 = new string2; str10 = new string “123abcd“; str10 = new string1 “123abcd“; str11 = new string “cdef“,“fgh“; str11 = new string2 “cdef“,“fgh“; string str2 = new string2 new string “123abcd“, new string “cdef“,“fgh“ ; /交错数组(两行二维数组) int, myArray1 = new int2,; myArray10 = new int3,2 1,2,3,4,5,6 ; /3行2列 myArray11 = new int2,3 7,8,9,10,11,12 ; /2行3列,数组,6.动态改变数组的大小 Resize方法 public static void Resize( ref T array, int newSize ) 这是一种泛型表示形式。其中T表示数组类型,array为要调整大小的一维数组,该数组从零开始;如果为null则新建具有指定大小的数组。如果newSize大于旧数组的Length,则分配一个新数组,并将所有元素从旧数组复制到新数组。如果newSize小于旧数组的Length,则分配一个新数组,并将元素从旧数组复制到新数组直到新数组被填满为止;旧数组中的剩余元素将被忽略。如果 newSize与旧数组的 Length相等,则此方法不执行任何操作。,动态改变数组的大小举例,【例3-4】演示如何动态改变一维数组的大小。 static void Main(string args) String myArr = “fox“, “lazy“, “dog“ ; Console.WriteLine(“初始值:“); PrintArrayValues(myArr); Array.Resize(ref myArr, myArr.Length + 2); Console.WriteLine(“调整为较大的长度后的值:“); PrintArrayValues(myArr); Array.Resize(ref myArr, 4); Console.WriteLine(“调整为较小的长度后的值:“); PrintArrayValues(myArr); Console.ReadLine(); ,数组,7.数组元素的排序与查找 C#语言中还提供了Sort和Reverse这样的静态方法,这些方法用快速排序算法将一维数组中的元素按照升序或降序排列。 还可以方便地查找指定的元素。 例如Contains方法和IndexOf方法等。,数组排序和查找举例,【例3-5】一维数组的排序和查找。 static void Main(string args) string books = “Java“, “C#“, “C+“, “vb“ ; Array.Sort(books); /升序排序 PrintAarrayValues(books); Array.Reverse(books);/降序排序 PrintAarrayValues(books); Console.WriteLine(“数组中是否有元素C#:0“, books.Contains(“C#“) ? true : false); Console.WriteLine(“元素C#在降序排序后的数组中的位置:0“, Array.IndexOf(books, “C#“); ,数组的统计以及数组和字符串间的转换,利用数组的Average方法、Sum方法、Max方法和Min方法可以求数组中所有元素的平均值、求所有元素的和、最大值和最小值。 对于字符串数组,可以直接利用字符串的Join方法和Split方法实现字符串和字符串数组之间的转换。,数组元素统计和字符串转换举例,【例3-6】演示如何统计数组中的元素以及如何实现数组和字符串之间的转换。 int a = 10, 20, 4, 8 ; string s = a0.ToSting( ); /数组的第一个元素转换为字符串 Console.WriteLine(“平均值:0“, a.Average(); /10.5 Console.WriteLine(“和:0“, a.Sum(); /42 Console.WriteLine(“最大值:0“, a.Max(); /20 Console.WriteLine(“最小值:0“, a.Min(); /4,3.3 枚举,枚举(enum)是一组命名常量的集合,称为枚举成员列表。它可以为一组在逻辑上密不可分的整数值提供便于记忆的符号,从而使代码更清晰,也易于维护。 声明enum类型变量的语法为: 附加声明 访问修饰符 enum 名称:数据类型 枚举列表 例如:enum daysMon,Tue,Wed,Thu,Fri,Sat/ 0,1,5 注意: enum days:byteX1=255,X2 /错误,X2=256,byte是0-255,emum类型的用法,namespace EnumExample enum MyColor 蓝色, 白色, 红色 ; enum Days 上旬, 中旬, 下旬 ; /可以在一个.cs文件中定义 - using EnumExample /在另外的文件中使用 static void Main(string args) MyColor color; Days day; color = MyColor.红色; day = Days.上旬; Console.WriteLine(“0,1”, color, day);/ 红色,上旬 /获取枚举类型中定义的所有符号名称 string colorNames = Enum.GetNames(typeof(MyColor); Console.WriteLine(“0“, string.Join(“,“, colorNames);/蓝色, 白色, 红色 /获取枚举类型中定义的所有符号名称对应的数值 int colorIndex = (int)Enum.GetValues(typeof(MyColor); for (int i = 0; i colorIndex.Length; i+) Console.WriteLine(“0:1”, colorNamesi, colorIndexi); / 蓝色:0, 白色:1, 红色:2 ,3.4 泛型(Generic),顾名思义,泛型是“比较广泛的数据类型”,即泛型是数据类型的一种通用表达形式,它可以表示任何一种数据类型。 泛型是从.NET Framework2.0(对应VS2005)开始提供的。,泛型的定义和引用,泛型(Generic)是具有占位符(类型参数)的类、结构、接口和方法,它与普通类的区别是泛型多了一个或多个表示类型的占位符,这些占位符用尖括号括起来。例如: public class MyClass public T MyProp get; set; /定义属性MyProp public void Print( ) Console.WriteLine(MyProp); /这里的T就是表示类型的占位符,它表示某种类型,只不过这种类型在创建泛型类的实例时才用实际类型来代替。 /引用,用int类型创建该泛型类: MyClass myclass = new MyClass( ); myclass.MyProp = 15; myclass.myPrint( );,泛型方法的定义和引用举例,public static void Swap(ref T item1, ref T item2) T temp = item1; item1 = item2; item2 = temp; static void Main( ) Double d1 = 0, d2 = 2; Console.WriteLine(“交换前:0,1“, d1, d2); Swap(ref d1, ref d2); Console.WriteLine(“交换后:0,1“, d1, d2); 定义一个类或方法时,可以用泛型T代表任何一种类型,而在引用时再指定具体类型。当代码调用泛型方法Swap时,C#编译器会自动将定义的泛型转换为引用代码中指定的类型,从而大大简化了程序员编写代码的复杂度。 如果不使用泛型,就需要写出很多重载的Swap方法,以表示int、float等参数的转换。,可空泛型,可空类型是泛型结构Nullable的实例。 例如,Nullable读作“可以为null的Int32”,可以将其赋值为任一个32位整数值,也可以将其赋值为null值。 可空类型具有以下特性: (1)可空类型表示可被赋值为null值的值类型变量。但是要注意,由于引用类型已支持null值,因此不能用该类型创建基于引用类型的null类型。 (2)语法“T?”是泛型“Nullable”的简写,此处的T为值类型。这两种形式可以互换。如Nullable也可以写为int?。 (3)程序员可以使用泛型的HasValue和Value只读属性测试是否为空和检索值,如果此变量包含值,则HasValue属性返回True;如果此变量的值为空,则返回False。,可空泛型举例,using System; class Sample public static void Main( ) DateTime? myNow; myNow = DateTime.Now; Display(myNow, “1) “); myNow = null; Display(myNow, “2) “); public static void Display(DateTime? displayDateTime, string title) Console.Write(title); if (displayDateTime.HasValue = true) Console.WriteLine(“The date and time is 0:F.“, displayDateTime.Value); else Console.WriteLine(“The date and time is not defined.“); ,3.5 泛型集合,在System.Collections.Generic命名空间下,提供了常用的泛型集合类。,哈希集合(HashSet),HashSet用于进行数学集合运算。 数学上的集合(Set)是指由某一规则定义的不重复出现且无特定顺序的元素的组合,其中规则用于确定一个元素是否属于某个特定的集合。 HashSet泛型类提供了高性能的数学集合运算,一个HashSet对象的容量是指该对象可以容纳的元素个数,属性Count可以读取容量。 常用方法: UnionWith方法:并集或Set加法 IntersectWith方法:交集 ExceptWith方法:差集(set减法) SymmetricExceptWith方法:余集(即并集-交集),哈希集合(HashSet)方法举例,h1初值“a”,”b”,”c”,”d”, h2初值“c”,”d”,”e”, h1.UnionWith(h2); /h1= “a”,”b”,”c”,”d”,”e” h1.IntersectWith(h2);/h1= ”c” h1.ExceptWith(h2); /h1= “a”,”b” h1.SymmetricExceptWith(h2); /h1= “a”,”b”,”d”,”e”,哈希集合举例,using System; using System.Collections.Generic; static void Main( ) HashSet evenNumbers = new HashSet( ); HashSet oddNumbers = new HashSet( ); for (int i = 0; i numbers = new HashSet(evenNumbers); numbers.UnionWith(oddNumbers); /numbers=0,1,2,.,9 Console.Write(“numbers contains 0 “, numbers.Count); /10 private static void DisplaySet(HashSet set) foreach (int i in set) Console.Write(“ 0“, i); ,列表和排序列表,列表是指一系列元素的组合,列表中可以有重复的元素。 List泛型类表示可通过索引访问的强类型对象列表,该类提供了对列表进行搜索、排序和操作的方法。 常用方法如下: Add方法:将指定值的元素添加到列表中。 Insert方法:在列表的中间插入一个新元素。 Contains方法:测试该列表中是否存在某个元素。 Remove方法:从列表中移除带有指定键的元素。 Clear方法:移除列表中的所有元素。 SortedList排序列表,用法与List类似,区别仅是排序列表中保存的是对列表中的元素按升序排序后的结果。,列表举例一,using System; using System.Collections.Generic; namespace ListExample class Program static void Main( ) List list = new List( ); list.Add(“张三“);list.Add(“李四“);list.Insert(0, “王五“); if (list.Contains(“赵六“) = false) list.Add(“赵六“); foreach (var item in list) Console.WriteLine(item); for (int i = 0; i list.Count; i+) Console.WriteLine(“list0=1“, i, listi); list.Remove(“张三“); list.Clear( ); Console.ReadLine(); ,列表举例二,如果是数字列表,还可以对其进行求和、平均值以及最大数、最小数等。 List list = new List( ); list.AddRange(new int 12,8,5,20 Console.WriteLine(list.Sum( ); /求和 Console.WriteLine(list.Average( ); /求平均值 Console.WriteLine(list.Max( ); /求最大数 Console.WriteLine(list.Min( ); /求最小数,链表,LinkedList为双向链表。LinkedList对象中的每个节点都属于LinkedListNode类型。每个节点又指向其Next节点和Previous节点。 LinkedList接受 null引用作为引用类型的有效Value属性,并且允许重复值。 如果LinkedList为空,则First和Last属性为null。,链表举例,string words = “a“, “b“, “c“; LinkedList sentence = new LinkedList(words); sentence.AddFirst(“dog”);/结果为“dog”,”a”,”b”,”c” LinkedListNode mark1 = sentence.First;/”dog” sentence.RemoveFirst( ); /结果为”a”,”b”,”c” sentence.AddLast(mark1); /结果为”a”,”b”,”c”,”dog” LinkedListNode current = sentence.Find(“b”); sentence.AddAfter(current,”lazy”); /结果为”a”,”b”,”lazy”,”c”,”dog”,字典和排序字典,Dictionary泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成,通过键来检索值。 该泛型类提供的常用方法如下。 Add方法:将带有指定键和值的元素添加到字典中。 TryGetValue方法:获取与指定的键相关联的值。 ContainsKey方法:确定字典中是否包含指定的键。 Remove方法:从字典中移除带有指定键的元素。 SortedDictionary 排序字典的用法和字典的用法相同,区别仅是排序字典中保存的是按键进行升序排序后的结果。,字典举例,Dictionary storedBooks = new Dictionary( ); storedBooks.Add(“book1“, 15); storedBooks.Add(“book2“, 25); storedBooks.Add(“book3“, 5); /输出字典中所有的书籍名称和存书数量 foreach (KeyValuePair k in storedBooks) Console.WriteLine(“Key=0,Value=1“, k.Key, k.Value); /检查字典中是否存在mybook if (!storedBooks.ContainsKey(“mybook“) storedBooks.Add(“mybook“,30); Console.WriteLine(storedBooks“book2“); /输出book2中保存的数量 /如果存在book4,修改数量;如果不存在,将其添加到字典中 storedBooks“book4“=20;,字典举例(续),/获取book2的数量 int value=0; if(storedBooks.TryGetValue(“book2“,out value) Console.WriteLine(“book2“,value=0“,value); else Console.WriteLine(“book2“在字典中不存在“); /如果存在book0,将其从字典中删除 storedBooks.Remove(“book0“);,队列,Queue泛型类表示对象的先进先出集合。队列在按接收顺序存储消息方面非常有用,存储在队列中的对象在一端插入,从另一端移除。 队列可以保存null值并且允许有重复的元素。 常用方法如下: Enqueue方法:将指定元素插入列尾。 Dequeue方法:队列首元素出列。,队列举例,Queue numbers = new Queue(); numbers.Enqueue(“one“); numbers.Enqueue(“two“); numbers.Enqueue(“three“); /输出队列中的所有元素 foreach (string number in numbers) Console.WriteLine(number); /移除开始处的对象 numbers.Dequeue();,堆栈,Stack泛型类表示同类型实例的大小可变的后进先出(LIFO)集合。 堆栈可以保存null值并且允许有重复值。 常用方法如下: Push方法:将指定元素插入栈顶。 Pop方法:弹出栈顶元素。,堆栈举例,Stack numbers1 = new Stack(); numbers1.Push(“one“); numbers1.Push(“two“); numbers1.Push(“three“); foreach (string number in numbers1) Console.WriteLine(number); numbers1.Pop(); foreach (string number in numbers1) Console.WriteLine(number);,3.6日期与时间处理,对日期和时间处理的常用类是DateTime类和TimeSpan类。 DateTime类表示范围在0001年1月1日午夜12:00:00到9999年12月31日晚上11:59:59之间的日期和时间,最小时间单位等于100纳秒(ns)。 TimeSpan类表示一个时间间隔。其范围在Int64.MinValue到Int64.MaxValue之间。,3.6日期与时间处理举例,【例3-10】DateTime类的用法举例。 DateTime.Now; /返回当前的时间 DateTime.Today; /返回当前的日期 DateTime.DaysInMonth(2002,1); /返回2002年1月的天数 TimeSpan.Zero; /00:00:00,3.6日期与时间处理举例(续),【例3-11】显示当前日期和时间。 using Sy

温馨提示

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

评论

0/150

提交评论