筆記8 泛型、10個數組

泛型(特別好用)

例題引發的思考

在這裏插入圖片描述

泛型的寫法

1、在類名後面添加,表示我這個類裏面可以使用一種泛型(任意類型)。
通常用字母T。就好比for循環遍歷一般用i。
2、只要指定T的類型即可保存該類新。泛型的用法:多了一個<T的指定類型>。
在這裏插入圖片描述

    //新創建一個類    Assets:資源  
    /*在類名(Assets)後面添加<T>,表示我這個類裏面可以使用一種泛型(任意類型)。
     通常用字母T。就好比for循環遍歷一般用i。*/
    public class Assets<T> 
    {
        private T[] assets;   //不用public是因爲我們要對它進行封裝
        public Assets(int num)
        {
            //傳進來的num的意思是,我們要對這個數組初始化。
            assets = new T[num];    
            //new一個T類型。因爲數組固定長度,所以要傳入數值
        }
                //外界想往上面數組添加信息
//這裏直接Set方法,傳入兩個參數:索引(index添加到第幾位上),T類型的數值(value)
        public void SetAsset(int index, T value)
        {
            assets[index] = value;
        }
    }   //此時就非常靈活了,只要指定T的類型即可。
    class Program
    {
        static void Main(string[] args)
        {

//泛型的用法:多了一個<T的指定類型>。此處是要保存字符串類型,所以填string
            Assets<string> asset = new Assets<string>(4);         
            asset.SetAsset(0, "1");     //第0位數保存個字符串1
            asset.SetAsset(1, "3");
            asset.SetAsset(2, "10");
            asset.SetAsset(3, "99");

            //還可以保存整型,int
            Assets<int> asset2 = new Assets<int>(2);
            asset2.SetAsset(0, 1);     //第0位數保存個整型1
            asset2.SetAsset(1, 3);
        }
    } 

泛型添加約束(where,很少寫)

在這裏插入圖片描述

10個數組

名稱空間

在這裏插入圖片描述

object、Object

在這裏插入圖片描述

第一種:可變數組(用的最多。 可變長度、效率低)

普通寫法(第1個)

內部

        static void Main(string[] args)
        {           
            //在外面寫,在此調用
            ArrayListTest();

            Console.ReadKey();
        }

外面:static void ArrayListTest(){下面是此處的內容}

創建數組

            //之前學的數組   固定長度、效率高
            //int[] array = new int[32];
            //1、數組(非常好用)  可變長度、效率低
            ArrayList array = new ArrayList();

添加元素

            //添加元素(可混加)
            array.Add(9);
            array.Add("8");
            array.Add(7); 

訪問並修改元素

            array[0] = 7;   //等號左邊表示訪問第1位,等號右邊表示將其賦值爲2

查看元素

            //查看元素個數Count
            Console.WriteLine(array.Count);

得到元素位置

           //得到元素的位置
            Console.WriteLine(array.IndexOf(7));   //會返回第一個7所在的索引

插入元素(有兩種方式)

          //方式一:在指定位置插入元素 
          //字符串爲:7 "8" 7 。將元素6出啊入到數組0的位置上(“插隊”)
            array.Insert(0,6);   

打印指定位元素

        Console.WriteLine(array[0]);    //打印第0位元素 
           //方式二:批量插入
            ArrayList array2 = new ArrayList();    //創建一個類新的數組
            array.Add(4);
            array.Add(5);
            
 //插入一個範圍。此處表示:將array2裏所有的元素插入到數組0的位置上。也可以插入自身。
            array.InsertRange(0,array2);  

是否包含元素

            //是否包含元素(很常用)
            Console.WriteLine(array.Contains(3));  //Contains返回的是布爾值 

刪除元素(四種方式)

            array.Remove(7);           //法一:刪除什麼元素
            array.RemoveAt(0);         //法二:刪除哪個索引的元素。
            array.RemoveRange(0, 2);   //法三:刪除從索引0開始的兩個元素
 
            array.Clear();             //法四:全部刪除 

泛型寫法(第2個)

泛型(List)。 能用List就不要用ArrayList,因爲泛型安全 。方法同上。

            //此處只支持int類型
            List<int> list = new List<int>();
            list.Add(3);
            
            Console.WriteLine(list[0]);   //打印第0位 

第二種:字典(無序)

普通寫法(又稱:哈希。第3個)

外面:static void HashTableTest(){下面是此處的內容}

創建HashTable

            Hashtable table = new Hashtable();

添加鍵值對(兩種方法)

            //法一
            table.Add("id", "001");  //鑰匙"id"就可以開"001"這把鎖
            table.Add("name", "小白");
            table.Add("score", "25"); 
            //法二
            table["kongfu"] = "玄冥神掌";

輸入鑰匙,會得到鎖

            Console.WriteLine(table["name"]);
            //輸入鑰匙"name",會得到鎖,即結果:小白。

有些方法都是一樣的

            //個數 table.Count
            //清空 table.Clear();

是否包含(返回布爾值)

            table.ContainsKey("name");   //是否包含Key
            //table.Contains("name");  同上,也是是否包含Key
            
            table.ContainsValue("小白");  //是否包含Value
            //除了像上面直接打印,也可以用布爾值接收
            bool res = table.ContainsValue("001"); 

快速遍歷

            //快速遍歷
            /*“table.Keys”表示table下面有一個屬性Key,它返回的就是一個集合。
            有兩個集合,一個是Keys,一個是Value。*/
            foreach (string key in table.Keys)     
            {
                Console.WriteLine(key);    //遍歷Key

                //遍歷Key的同時把Value打印出來
                Console.WriteLine(key + " " + table[key]);  
                //結果顯示:對應關係對的,只是對與對的前後關係是亂的。
            } 

泛型寫法(又稱:字典.第4個)

創建泛型

            Dictionary<int, string> dic = new Dictionary<int, string>();
            dic.Add( 1,"333");   //添加鍵值對

取值(兩種方法)

法一:如果寫了個不存在鑰匙,程序會崩。但是,進而可以知道這裏錯了。(推薦使用)

           Console.WriteLine(dic[1]);    
           //輸入鑰匙1,會得到鎖,即結果:333。  

法二:如果寫了個不存在鑰匙,程序不會崩。但是,如果這裏錯了,不易察覺。

            string value;   //取得值是string類型,取value
            bool res2 = dic.TryGetValue(1, out value);
            //使用了out。當要修改value時,纔會填寫out。     
 //表示:我嘗試去取一下value的值。取出來就True,反之,False。好處:程序永遠不蹦。                

在這裏插入圖片描述

第三種:隊列

存儲模式

在這裏插入圖片描述

泛型寫法(比普通常用。第5個)

外面:static void QueueTest(){下面是此處的內容}

創建泛型

Queue<int> queue = new Queue<int>(); 

添加元素(Enqueue)

            //添加元素
            queue.Enqueue(1);
            queue.Enqueue(3);

取元素(兩種方法)

            //法一:取出一個元素並且刪除。
            Console.WriteLine(queue.Dequeue()); 
            // 法二:取出一個元素不刪除。
            Console.WriteLine(queue.Peek()); 

是否包含

            queue.Contains(3);  //是否包含3

元素個數

            //元素個數
            int num = queue.Count;

普通寫法(名字:普通、泛型一樣。第6個)

第四種:棧

泛型寫法(第7個)

外面:static void StaticTest(){下面是此處的內容}

創建一個泛型

  Stack<int> stack = new Stack<int>();

添加元素(壓棧)

       //壓棧:添加一個元素
            stack.Push(1);
            stack.Push(2);
            stack.Push(3); 

取元素(兩種方法)

       //法一:取出元素並從棧中刪除(出棧)
            Console.WriteLine(stack.Pop()); 
       //法二:取出元素不刪除
            Console.WriteLine(stack.Peek()); 

普通寫法(名字:普通、泛型一樣。第8個)

第9個:無序集合(只有泛型這一種寫法)

外面:static void SetTest(){下面是此處的內容}

創建泛型

  HashSet<int> sets = new HashSet<int>();

添加元素

            sets.Add(1);
            sets.Add(2);
            sets.Add(3);
            sets.Add(4); 

移除元素

            //移除元素(與數組一樣:有移除)
            sets.Remove(4); 

查看個數

            //查看個數。需要通過遍歷
            int num = sets.Count;
            foreach (int n in sets)
            {
                Console.WriteLine(n);  
                //雖說它的儲存是無序的,但遍歷時,可能還是按照順序出來
            } 

清除

 sets.Clear();    //清除

第10個:數組(之前學過的)

數組是集合的一種。
定義:存儲了同一類型元素的元素集合。
特點:固定長度。

一維數組

聲明:類型[] 變量名

int[] itemId;      //聲明瞭一個數組叫itemId,用來存放物品Id的。 

創建數組(初始化)

int[] itemId =new int[10];    
//等號左側是聲明(同上),右側是初始化了一個數組,只能放10個數。

賦值

inteId[0] = 1;
itemId[9] = 10;    //賦值方法一:數組名稱[],[]裏面填寫數組的索引。從第0個數開始,不要越界。  
int[] itemId = new int[3]{1, 2, 3};
//簡寫:(推薦寫法)
int[] itemId = new int[]{1, 2, 3};
//簡寫:
int[] itemId = {1, 2, 3}; 

例1:修改第0位的值爲4,並輸出。

           int[] itemId = new int[] { 1,2,3 };
//等號左側,是一個叫itemId的數組,用來存放遊戲Id。等號右側,是初始化一個數組,容量爲3.

            //將第0位的值改爲4
           itemId[0] = 4;

           //輸出第0位的值
           Console.WriteLine(itemId[0]);

           //爲了不讓程序退出
           Console.ReadKey();

輸出數組長度

length:長度
itemId length:數組長度

//輸出數組長度
           Console.WriteLine(itemId.Length);

二維數組

聲明:類型[,] 變量名及初始化

        //聲明一個叫MapInfo(地圖信息)的二維數組,這個數組是3行4列。
        int[,] MapInfo = new int[3, 4] {        
               {3,2,4,5},
               {3,1,7,7},
               {1,8,9,0}

           };
           int n = MapInfo[1, 2];        //取出第2行,第3列的值

     
           //輸出n
           Console.WriteLine(n);

           //爲了不讓程序退出
           Console.ReadKey();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章