C#集合。

来源:https://www.cnblogs.com/zhangyuhao/archive/2019/03/14/10518935.html
-Advertisement-
Play Games

集合命名空間: using system.collections. 非泛型集合 using system.collections.Generic. 泛型集合 為什麼要用集合: 1、數組一旦聲明長度就固定了。 2、集合有很多方法可以用 等 常用集合: 類似數組集合:ArrayList List<> 鍵 ...


集合命名空間:

  using system.collections. 非泛型集合

  using system.collections.Generic.  泛型集合

為什麼要用集合:

  1、數組一旦聲明長度就固定了。

  2、集合有很多方法可以用

  等

常用集合:

類似數組集合:ArrayList  List<>

鍵值對集合:Hashtable  Dictionary<K V>

棧集合:Stack

隊列:Queye

ArrayList:

 class Program
    {      
        static void Main(string[] args)
        {
            ArrayList arrayList = new ArrayList();
            arrayList.Add(1); //增加一個元素
            arrayList.AddRange(new int[] { 2, 3 });//增加一個集合
            arrayList.Insert(0, "開始:");//在指定位子插入一個元素
            arrayList.InsertRange(4, new string[] { "", "", "" });//指定位置插入集合
            arrayList.RemoveAt(7);
            arrayList.Clear();//清空集合
            for (int i = 0; i < arrayList.Count; i++)
            {
                Console.WriteLine(arrayList[i]);
            }
        }    
    }

Remove()不是根據對象來判斷的,而是根據值來判斷。

Contains()是否包含某個值,也是根據值來判斷的。

集合轉為數組:.ToArray().

排序:  1、.sort() 升序  沒有降序   可以用.Reverse()顛倒位置實現。

    2、想讓任何集合實現排序需要實現 IComparable介面 。

    3、直接調用sort是使用ICompareble 介面的預設方式來排序。可以用sort的重載,使用自己的比較器。

Hashtable:

簡單添加和獲取:

class Program
    {      
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("Sam", "Sam");
            hashtable.Add("Penny", new Person() { Name = "Penny" });
            Console.WriteLine(hashtable["Sam"]);
            Person Penny = hashtable["Penny"] as Person;
            Console.WriteLine(Penny.Name);

        }    
    }

鍵值對集合的鍵不能重覆。

判斷是否存在某個鍵:.ContentsKey()    是否存在某個值:.ContentsValue()

遍歷Hash table:

class Program
    {      
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("Sam", "Sam");
            hashtable.Add("Penny", "Penny");
            //遍歷鍵
            foreach (object item in hashtable.Keys)
            {
                Console.WriteLine("Key:{0}----Value:{1}",item,hashtable[item]);
            }
            //遍歷值
            foreach (object item in hashtable.Values)
            {
                Console.WriteLine("Value:{0}",item);
            }
            //遍歷鍵值對
            foreach (DictionaryEntry item in hashtable)
            {
                Console.WriteLine("Key:{0}---Value{1}",item.Key,item.Value);
            }

        }    
    }

集合小練習:

兩個ArrryList集合的並集。

class Program
    {      
        static void Main(string[] args)
        {
            ArrayList A = new ArrayList(new string[] {"a","b"});
            ArrayList B = new ArrayList(new string[] { "a", "b","c","d" });
            for (int i = 0; i <B.Count; i++)
            {
                if (!A.Contains(B[i]))
                {
                    A.Add(B[i]);
                }
            }
            for (int i = 0; i < A.Count; i++)
            {
                Console.WriteLine(A[i]);
            }
        }    
    }

隨機生成十個1-100之間的數放到arraylist中,這些數必須是偶數且不能重覆。

class Program
    {      
        static void Main(string[] args)
        {
            ArrayList arrayList = new ArrayList();
            Random random = new Random();
            while (arrayList.Count<10)
            {
                int r = random.Next(1, 101);
                if (!arrayList.Contains(r)&&((r%2)==0))
                {
                    arrayList.Add(r);
                }
            }
            for (int i = 0; i < arrayList.Count; i++)
            {
                Console.WriteLine(arrayList[i]);
            }
        }    
    }

上面程式把random放迴圈外面效率更好,因為無參的random構造函數以系統時間為種子,而一遍迴圈完了以後時間還沒來得及變,就會生成相同的數。

泛型集合: 

List<string> list = new List<string> () 

和 arraylist相比:

  數據類型固定,有更多的方法可以用。

Dictionary<string, int> dic = new Dictionary<string, int> ;

和hashtable相比:

  鍵和值都有類型約束。

遍歷鍵值對:

 class Program
    {      
        static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            dic.Add("Sam", 22);
            dic.Add("Penny", 23);
            foreach (KeyValuePair<string,int> item in dic)
            {
                Console.WriteLine("keys:{0}--value:{1}",item.Key,item.Value);
            }
        }    
    }

判斷字元串中每個字母出現的次數:

class Program
    {      
        static void Main(string[] args)
        {
            string str = "wellcome to china";
            Dictionary<char, int> dict = new Dictionary<char, int>();
            for (int i = 0; i < str.Length; i++)
            {
                if (char.IsLetter(str[i]))
                {
                    if (dict.ContainsKey(str[i]))
                    {
                        dict[str[i]]++;
                    }
                    else
                    {
                        dict.Add(str[i], 1);
                    }
                }
            }
            foreach (KeyValuePair<char,int> item in dict)
            {
                Console.WriteLine("{0}----{1}",item.Key,item.Value);
            }
        }    
    }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • --一本錯誤的記錄 insert into Book values('錯誤時怎樣練成的',111) --左連接 select s.name,b.name from student as s left join Book as b on s.id=b.studentid --右連接 select s. ...
  • 一般而言webservice是部署在哪台伺服器,然後它的address location就是指向哪個,但是由於有些情況處於各種原因,如網路策略,需要先訪問某個ip之後再進行跳轉到一個ip,這個時候就需要代碼控制websevice指向的IP地址了,就需要用到SoapExtensionReflector ...
  • 裝箱:值類型-->引用類型。 拆箱:引用類型-->值類型 裝箱:把值類型拷貝一份到堆里。反之拆箱。 具有父子關係 是拆裝箱的條件之一。 所以: 裝的什麼類型,拆的時候也必須是對應類型。 使用方法時看是否裝拆箱:看需要的參數和傳入的參數的集體類型。 使用泛型集合避免裝拆箱。 ...
  • MVC頁面擴展方法 單例模式 /// <summary> /// 創建一個Config內容對象 /// </summary> /// <param name=""></param> /// <param name="key"></param> /// <returns></returns> publ ...
  • 今天給大家帶來的討論主題是通過實戰經驗來對百億數據量下的多表數據查詢進行優化,俗話說的好,一切脫離業務的架構都是耍流氓,接下來我就整理一下今天早上微信群里石頭哥給大家分享的百億數據量多表查詢架構以及優化思路。由於本文內容整理自微信群,爬樓不易,整理更不易,如果有遺漏,歡迎大家在評論區留言。 作者:依 ...
  • 之前在隨筆《在Winform開發中使用Grid++報表》介紹了在Winform環境中使用Grid++報表控制項,本篇隨筆介紹在Boostrap開發框架中使用Grid++報表,也就是Web環境中使用Grid++報表,對於我上篇提到的二維碼條形碼的資產信息表,我系統通過Web方式進行呈現,或者展示其報表的... ...
  • 本文章是介紹和記錄如何創建GraphQL項目,以及如何使用GraphQL進行數據的相關操作。項目參照GraphQL .Net 的官方文檔進行實踐 一、項目結構: 為了更好的和原有的項目結合在一起,儘可能減少對原項目的修改。我對項目結構做瞭如下分層。 二、項目結構分層說明 Contracts層: 項目 ...
  • 1. ODBC、OLEDB、ADO、ADO.NET之間的關係 ODBC: 開放資料庫互連(ODBC)是MICROSOFT提出的資料庫訪問介面標準。ODBC(Open DatabaseConnectivity,開放資料庫互連)提供了一種標準的API(應用程式編程介面)方法來訪問資料庫管理系統(DBMS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...