C# 结构、集合、字典

 结构

 

  1. 结构是什么?

     数据类型,值类型数据(存储值)

 

     值类型:存储的是值,栈内存。

         简单值类型(13种)

         枚举类型

        

     引用类型:存储的地址,堆栈中

         数组

         类类型

         int[]  num  = new  int[4]

         1.等号左侧 : int[]  num 

           栈内存开辟区域,存储变量num

         2.等号右侧: new  int[4]

           堆内存开辟区,存储数组,4个元素

         3.将等号左侧与等号右侧连接,

           栈内存中开辟的num指向堆内存真正的数组

           栈num存储的是什么?num数组的地址

 

           num[0] :

           b[1] :

 

           int[]   b =  new  int[3];

           Console.WriteLine( b );   

          Role r = new Role();     

 

 

  2. 结构的基本语法?

    

     struct  结构名

     {

        //成员

     }

     注:结构的命名方式和类是一样的。

    

 

  3. 结构中可以放什么内容?

     类中可以放的内容,结构中大部分都可以。

     1) 字段

     2) 普通方法

     3) 含有参数的构造方法

     4) 不能放无参数的构造方法

 

  4. 结构的特点(结构和类的区别)

    

     1) 结构是一种值类型 的数据,

        创建一个结构对象时,不必使用 new 创建结构对象

        一般不会这样用,但是使用:

        Point  p = new Pint()也不会报错;

 

 

        例如:

        以下几行代码分别将Point作为类和结构

        来描述。

        class Point { }   Point  p = new Point();

        ---------------------------------------------

        struct  Point { } //创建一个结构

       

        如何创建结构对象,设置字段值

        i.  Point  p ;  //直接声明Point类型的变量p

            p.x = 20 ;  //为p中的x字段赋值

 

       

        ii. Point  p = new Point( 20 );

            利用含有一个参数的构造方法为p赋值

 

 

      2) 结构属于值类型

         类属于引用类型

        

    Point  p  =   new    Point( 20 );  类

 

    Point  p  ;

    p.x = 20  ;        结构

 

     3) 何时使用使用类 ?使用结构:?

 使用类:

         使用结构:

         如果描述的对象是一种比较复杂,或字段较多时

         就要使用类。

         如果要描述一种包含多个值,但是是一种轻量级的

         数据类型时,使用结构。

        

--------------------------------------------------------

  集合

 

  程序中存储数据,可以通过哪些方式存储?

 

1) 存储一个数字,通过哪种方式存储?

     如:18

2)存储多个同一类型的多个数据,通过哪种类型存储?

比如:一组数字:10,20,30,40,60

          一组名字:"Tom","Lucy","Jack"

   

   

   集合

   1. ArrayList

   2. List

   3. Dictionary

 

  1.ArrayList

//已经过时了 ArrayList();

using System.Collections;

-------------------------------------------------------

  2.  List<T>

 

   1) 创建List集合的基本语法:

       List<集合>

 

   1. <T>  泛型

   

      T: 数据类型

         int,byte ,short ,string

         bool

         char

         Car

         Person

         Role

         Hero

         Solider

         .....

  

  2. 泛型:

 

     1)类型限制,集合中的数据类型进行限制

    

     2)<T> 表示泛型的写法。

            T指的是一种数据类型

     3)泛型是一种编译期的类型

       (运行之间会进行语法检查)

        针对泛型的语法检查:检查的是类型是否匹配

    

3.List 集合和 ArrayList 集合一样,提供了常用的方法:

    

  1)Count

  2) Add()

  3) Remove()

  4) RemoveAt()

  5) Reverse()

  6) Contains()

  7) ToArray()

  .........

 

  练习:

  1.创建一个ArrayList集合,集合名为 numbers

    2)向集合中添加3个float类型的数据,分别为:

       1.1f ,  2.2f,  3.3f  

    3)获取集合的元素个数并打印

    4) 对集合进行遍历(使用for或foreach即可)

    5) 继续向集合中添加一个bool类型的数据,值为 true

    6) 再对集合进行遍历(使用for或foreach即可)

       查看是否有错误。

 2.创建一个List集合,集合中存储“Book”类型的数据,

   集合名为 books.注:请自己创建Book类,包含书名,价格...

   1) 创建三个Book类型的对象,并通过Add()方法添加到集合

   2)获取集合的长度(Count)

   3)遍历books集合中的元素,打印出每一本书的书名

   4) 移动集合中下标为1的元素,移除后,打印集合长度

      观察是否有变化.提示:RemoveAt(下标值)

   5)将books集合转成数组类型 ToArray(),亲打印数组长度

   6)将books数组清空,Clear(),然后再打印集合长度。

   7)体会List集合是如何限制集合中存放的数据数据类型的.

-----------------------------------------------------

 

  3.Dictionary  字典

   

 

   List<T>

   Dictionary <key,value>

 

   花名册 

 

   1-王勇辉

   2-李...

   3-宋旗舰

   

 

 

 

  1. Dictionary 基本语法:

 

     Dictionary<TKEY,TVALUE>  dic = new 

               Dictionary < TKey , TValue > ();

     键 值对

 

     Dictionary<int ,string> names = new .....

    

     names.Add( 1 ,"王勇辉" );

     names.Add( 2, "Lucy"   );

     names.Add( 3, "宋旗舰" );

 

 

  2. Dictionary 如何存储数据

 

     使用 键值对 的形式存储。

     存放字典中的每个元素,有两分组成:key,value

     字典中的key的值不能重复,否则 报错;

     但是value的值却可以重复。

     集合中的所有key值,可以通过方法获取到,是一个集合

     集合中的所有value值,可以通过方法获取到,是一集合

    

     1101010101203    ,   "老王"

 

     1101010138434    ,   "老王"    

 

  3. 常用方法:

     1) 如何创建Dictionary集合

     2)获取集合中的所有key键,如何遍历所有的键值 

     3)获取集合中的所有value值,如何遍历所有的键值 

     4)获取集合中元素的个数(长度)

     5)查找集合中是否存在指定的key值

     6)查找集合中是否存在指定的value值

     7)......

    

   

   练习:创建一个Dictionary 集合,花名册

         学生的编号作为键值,学生的名字作为字典的值。

   要求:

   1) 有一个集合  : new

   2) 向集合中添加数据 :Add()

   3) 获取所有学生的编号, 遍历学生的编号  Keys

   4) 获取所有学生的名字,遍历学生的姓名   values 

   5) 查找编写为"18"的这个号码有没有出现在花名册了

       想18号所对应的那个学生的学生名字。

       ContainsKey()

 

 

    class  Dictionary<TKey, TValue>

    {

         //KeyCollection作为了字典集合的一个内部类

         //直接把它当成一个普通的变量就行

         class  KeyCollection {     }

    }

   //返回类型是 :KeyCollection 类型的

   //但是KeyCollection类型不能直接写,

   //应该把它的 上一层上清楚,中间用点

   Dictionary<TKey, TValue> . KeyCollection     =                                        names.Keys ;

 

 

 

  4. 案例

  

 

 

 

  集合总结:

 

  1.ArrayList 集合已经过时,不再使用。

    如果在代码中使用,需要手动导入命名究竟:

    using System.Collections;

 

 

  2.List<T> 替代了ArrayList的操作

   

    List<T> 所在的命名空间:System.Collections.Generic

    提示了增删改查的常用方法

    允许出现相同值的元素

    存储数据时,第一个集合元素下标为0,后面为1...  

 

  3. Dictionary<Tkey,TValue> 字典集合

     以键值对的形式存储数据。

     所在的命名空间:System.Collections.Generic

     Key,Value  ---- 

 

 ------------------------------------------------------

   树

   二叉树

   队列

   堆栈

 

   总结:

  

   结构 -- 结构是什么?

           和类相似

           struct 结构

           不能无参数构造方法

           继承

          

   内存 -- 数据类型

 

           值类型:分哪几种

             13种

             结构

             枚举

           引用类型

             new 关键字---属于引用类型

             new int[4]

             new Hero("name")

             interface 接口

             委托

             string

 

             引用类型在进行参数传递时,传递的是地址

             值类型在进行参数传递时,传递的是值

     

   

    public  static void  Change( int[]  n )

    {

          n[0] = 100l;

    }

    static  void  Main(string[] args)

    {    int[] a = { 100,200,300 };   

         Change( a );        

         Console.WriteLine( a[0] );

    }

            

            

            

  

 

 

day13  (2019.4.18) (2018.01.15.)作业

 

1.List集合的使用

 

 创建一个List集合,集合名为numbers,集合中用于存储10个数字,

 10个数字要求利用随机数产生。范围为(-100,100)

 要求:

 1) 打印集合中的元素个数

     然后使用 for循环遍历集合

 2) 向集合最后一个下标处插入int数字的最大值

     然后使用 foreach 遍历集合

 3) 请尝试移除集合中int类型最大的那个数字,

     然后返回结果

 

 4) 移除集合中的所有元素

 

 2. Dictionary<Key,Value> 集合集合

    创建一个集合,该集合用于表现游戏角色的基本信息

    key表示角色的编号(int),value表示角色

    注:集合的key为int类型,集合的value值为Role类型

        创建Role类,包含的内容:角色名称,角色年龄

   

    要求:

    1) 向集合中添加5个不同的角色,

        101 ---- 吕布,18,

        102 ---- 西施,20

        103 ---- 八戒,30

        104 ---- 李白,40

        105 ---- 貂蝉,19

    2) 请尝试获取集合中的所有 key ,并遍历

 

    3) 请尝试获取集合中的所有 value,并遍历

  

    4) 遍历集合

  

   

   3. 在已经有继承关系 的试题类中,继续完成以下操作:

     1) 构建一个试题类型的数组,Question[]

         用于存储5道不同类型的数据

     2) 要求,创建单选试题,多选试题,使用父类变量指向子类

         对象的方式创建

     3) 将试题添加到数组中

     4) 从数组中随机取出一道试题,将这道试题打印到控制台

         然后提示用户输入答案,判断答案

 

  4. 游戏树 案例,没有完成的同学,

     周末请辛苦完成。  

    

 

 

 

   作业1:(选做题)

 

   定义一个图形类,Shape.cs -- 父类

   包含的内容:

   ---字段: 图形名字(string  name )  

   ---方法: 构造方法(无参数,含有1个参数)

            注:方法会被子类重写 ,virutal

            求周长  --- double  GetLength() --- 0.0

            求面积  --- double  GetArea()   --- 0.0

 

   定义两个子类,一个表示圆形,一个表示矩形

  

   圆形类,Circle.cs  , 包含的内容:

   ---字段: 半径 ( float  radius )

   ---方法: 构造方法(无参,含有两个参数)

            重写父类的求周长和求面积的方法

      

       求周长:2 * 圆周率 * 半径

       求面积:圆周率 * 半径 * 半径

 

   注:圆周率暂时使用:Math.PI 获取

 

   3) 矩形类,Rectangle.cs , 子类,包含的内容:

      ---字段:长(float height ),宽(float width)

      ---方法: 构造方法(无参数,含有2个参数)

         重写父类的求周长和求面积的方法

   

         求周长:2 *( 长 + 宽 )

         求面积:长*宽

 

  要求:类中的字段全部私有化,类中的方法公开化.

       为私有化字段添加标准属性

      

  创建一个圆形,通过属性实现为圆的字段赋值

  圆的名字为: 小圆圆,半径为10.0

  要求,根据给定的内容,计算圆的周长和面积

 

  创建一个矩形类,通过构造方法为矩形的长和宽字段赋值

  长为12.0,宽为5.5

  然后通过属性为矩形的名字赋值, 矩形1,

  要求,根据给定的内容,计算矩形的周长和面积.

 

 

      

 

 

 

 

    测试类

posted @ 2019-09-10 19:57  Winward_King  阅读(1551)  评论(0编辑  收藏  举报