C# 結構、集合、字典

 結構

 

  1. 結構是什麼?

     數據類型,值類型數據(存儲值)

 

     值類型:存儲的是值,棧內存。

         簡單值類型(13種)數組

         枚舉類型ide

        

     引用類型:存儲的地址,堆棧中

         數組測試

         類類型spa

         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,

  要求,根據給定的內容,計算矩形的周長和麪積.

 

 

      

 

 

 

 

    測試類

相關文章
相關標籤/搜索