C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目錄

列表(List

特點

創建列表

RemoveAll 刪除與之條件相匹配的數據 ?會返回刪除的個數

Capacity 獲取或設置列表的容量

更多方法可參照上篇文章:C#_ArrayList動態數組

字典(Dictionary

特點

定義一個字典

向字典中添加數據Add?

獲取字典中儲存的數據個數Count

使用索引器可以訪問字典中的某個數據

ContainsKey(); 判斷字典中是否包含某個 鍵

ContainsValue(); 判斷字典中是否包含某個 值

列表與字典的選擇

練習


在 C# 中,列表(List)和字典(Dictionary)是兩種常用的集合類型,用于存儲和管理數據。它們各有特點,適用于不同的場景。

列表(List<T>)

List<T>?是一種動態數組,它可以存儲相同類型的元素,并且可以動態調整大小。

列表是屬于集合類里面的 , 集合類:用來儲存一堆數據的 ?是數據的集合 ?列表:只是集合中的一種儲存數據的表達方式

特點

  • 元素按順序存儲,可通過索引訪問
  • 允許存儲重復元素
  • 查找元素需要遍歷(除非知道索引)
  • 適合需要按順序訪問元素的場景

創建列表

?List列表屬于是泛型類 列表在創建的時候是可以給他一些初始值的 在()后面跟上{}里面寫數據

跟數組差不多 ?但是數組的長度是固定的 列表是可以添加數據的 ?長度也是不固定的

 // 創建了一個 操作整數類型的列表List<int> list = new List<int>() { 10, 212, 423, 124, 855, 546, 17, 528 };// 創建了一個 操作字符串類型的列表
List<string> liststr = new List<string>();
// Add末尾添加數據
liststr.Add("張三");
liststr.Add("李四");

RemoveAll 刪除與之條件相匹配的數據 ?會返回刪除的個數

 internal class Program{static void Main(string[] args){List<string> liststr = new List<string>() { "張三", "李四", "李四", "李四", "李四", "李四" ,"王五"};//RemoveAll 刪除與之條件相匹配的數據  會返回刪除的個數 //定義a記錄刪除個數int a = liststr.RemoveAll(EndsWithSaurus);//顯示列表內容Console.WriteLine(a);foreach (string item in liststr){Console.WriteLine(item);}}private static bool EndsWithSaurus(String s){return s.EndsWith("李四");}}

運行結果

Capacity 獲取或設置列表的容量

列表的內部數據在儲存是其實也是使用的數組 ?一個空的列表會有一個長度為0的數組 當給列表添加數據的時候 默認情況下 列表的容量會擴大為4 如果添加第5個數據就會擴容為8 ....倍增 ?如果自己設置了容量 就會根據設定的值倍增 ? 當列表的容量發生變化時 會重新創建新的數組 Array.Copy() 將舊數組中的數據復制到新數組里面來

List<int> listint = new List<int>();空的列表。長度起始為0,后期加入數據會自動擴大空間0->4->8->16->...->n*2
Console.WriteLine(listint.Capacity);長度起始為10,后期加入數據會自動擴大空間20->40->80->160->...->n*2
listint.Capacity = 10;
Console.WriteLine(listint.Capacity);

更多方法可參照上篇文章:C#_ArrayList動態數組

字典(Dictionary<TKey, TValue>)

Dictionary<TKey, TValue>?是一種鍵值對集合,每個元素都由一個鍵(Key)和一個值(Value)組成。

字典的作用:一般用于一些信息的記錄 ?用字典儲存的數據可以快速的查詢

字典: 類似于List 只能儲存類型固定的數據 長度不固定

List 使用索引進行數據的操作 ?字典要使用"鍵"進行數據操作

鍵: 標識,在一個字典中 鍵是唯一的 ?并且不能為null,如"姓名": 張三 ? "年齡":18 ? ?"性別":男

特點

  • 元素以鍵值對形式存儲
  • 鍵必須唯一,值可以重復
  • 通過鍵可以快速查找對應的值
  • 適合需要通過鍵快速訪問數據的場景

定義一個字典

格式:Dictionary<鍵的數據類型,值的數據類型> ?變量 ?= new Dictionary <鍵的數據類型,值的數據類型>();

 //在創建字典是 可以給一些初始數據Dictionary<string,int> keyValuePairs = new Dictionary<string, int>() {{"Name",666},{"sex" , 1 },{"年齡",18 }};

向字典中添加數據Add?

獲取字典中儲存的數據個數Count

 //向字典中添加數據 AddkeyValuePairs.Add("身高", 178);// 獲取字典中儲存的數據個數Console.WriteLine(keyValuePairs.Count);

使用索引器可以訪問字典中的某個數據

  // 使用索引器Console.WriteLine(keyValuePairs["Name"]);//修改鍵為Name的數據值keyValuePairs["Name"] = 888;

ContainsKey(); 判斷字典中是否包含某個 鍵

ContainsValue(); 判斷字典中是否包含某個 值

//判斷字典中是否包含某個 鍵
Console.WriteLine(keyValuePairs.ContainsKey("吳凡"));
//判斷字典中是否包含某個 值
Console.WriteLine(keyValuePairs.ContainsValue(888));

列表與字典的選擇

  • 當需要按順序存儲和訪問元素時,選擇?List<T>
  • 當需要通過唯一標識符(鍵)快速查找數據時,選擇?Dictionary<TKey, TValue>
  • 列表的查找時間復雜度是 O (n),而字典的查找時間復雜度接近 O (1)
特性List<T>(列表)Dictionary<TKey, TValue>(字典)
存儲結構線性存儲相同類型的元素鍵值對(Key-Value)形式存儲
訪問方式通過索引(int 類型)訪問通過鍵(TKey 類型)訪問
元素唯一性允許重復元素鍵(Key)必須唯一,值(Value)可重復
查找效率需遍歷查找(已知索引時為 O (1),否則為 O (n))通過鍵查找效率高,接近 O (1)
適用場景需要按順序訪問、存儲一組相同類型數據需要通過唯一標識快速查詢、修改數據
元素順序保持插入順序不保證元素順序(.NET Core 3.0+ 部分實現保留插入順序)
核心操作Add、Insert、Remove、IndexOf 等Add、ContainsKey、Remove、TryGetValue 等
內存占用相對較少相對較多(需額外存儲鍵的哈希信息)

通過上述對比可以看出,List<T> 更適合處理有序數據集合,而 Dictionary<TKey, TValue> 則在需要快速鍵值查找的場景中更具優勢,實際開發中可根據具體需求選擇合適的集合類型。

在實際開發中,這兩種集合類型經常結合使用,例如?List<Dictionary<string, object>>?可以用來表示一組具有多個屬性的對象。

練習:

把數據存儲到字典中.用戶輸入需要查詢的省份,打印對應的市,如:

輸入:河北省?????????顯示 :石家莊市? 唐山市

輸入:山西省? ? ? ? ?顯示 :太原市? ? ? 大同市?

輸入:河南省?????????顯示 :鄭州市? ? 南陽市

//創建一個空字典
Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();//以下三種在字典添加數據的方式
List<string> list = new List<string>() { "鄭州市","商丘市"};
dic.Add("河南省", list);dic.Add("河北省", new List<string>() {"石家莊市","唐山市" });List<string> list1 = new List<string>();
list1.Add("太原市");
list1.Add("大同市");
dic.Add("山西省", list1);
//拿到字典中所有的鍵 遍歷字典 拿到字典中的所有的數據 { "xxxx" : xxxx}
foreach (KeyValuePair<string, List<string>> item in dic)
{//item 是鍵和值一起存在的// 可以獲取到 字典中當前數據的鍵Console.WriteLine(item.Key);// 可以獲取到 字典中值列表當前數據的數據foreach (string n in item.Value) { Console.WriteLine(n); }
}
 Console.WriteLine("請輸入要查詢的省份");string user = Console.ReadLine();//判斷 字典中是否包含用戶輸入的鍵if (dic.ContainsKey(user)){// 如果存在 就拿到當前鍵所對應的值// 因為我們在寫字典數據時 值的數據使用List列表儲存的  所以我們根據鍵訪問的值就是一個列表// 循環列表(dic[user]) 拿到里面每個數據item   //dic[user] 通過索引 訪問字典中鍵為user的值foreach (string item in dic[user]){Console.WriteLine(item);}}else{Console.WriteLine("輸入省份字典中不存在");}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91201.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【實時Linux實戰系列】實時網絡控制與調度

在實時控制系統中&#xff0c;網絡調度是確保實時數據流傳輸和處理不受延遲影響的關鍵。實時網絡控制與調度技術對于工業自動化、金融交易、多媒體流等領域至關重要。通過合理設計網絡調度策略&#xff0c;可以顯著提高系統的實時性和可靠性。本文將介紹如何在實時控制系統中實…

Qwen3-Coder:介紹及使用 -- 超強AI編程助手

更多內容&#xff1a;XiaoJ的知識星球 目錄一、Qwen3-Coder模型介紹1.預訓練階段&#xff08;Pre-Training&#xff09;2.后訓練階段&#xff08;Post-Training&#xff09;1&#xff09;Scaling Code RL: Hard to Solve, Easy to Verify2&#xff09;Scaling Long-Horizon RL二…

uniapp 如果進入頁面輸入框自動聚焦,此時快速返回頁面或者跳轉到下一個頁面,輸入法頂上來的頁面出現半屏的黑屏問題。

如果進入頁面輸入框自動聚焦&#xff0c;此時快速返回頁面或者跳轉到下一個頁面&#xff0c;輸入法頂上來的頁面出現半屏的黑屏問題。輸入法出來后&#xff0c;設置了自動將頁面頂上來的配置&#xff1a;pages.json"softinputMode": "adjustResize""g…

深入了解 Kubernetes(k8s):從概念到實踐

目錄 一、k8s 核心概念 二、k8s 的優勢 三、k8s 架構組件 控制平面組件 節點組件 四、k8s docker 運行前后端分離項目的例子 1. 準備前端項目 2. 準備后端項目 3. 創建 k8s 部署配置文件 4. 部署應用到 k8s 集群 在當今云計算和容器化技術飛速發展的時代&#xff0c…

Android User版本默認用test-keys,如何改用release-keys

Android User版本 默認用test-keys&#xff0c; 如何改用release-keys 開發云 - 一站式云服務平臺 --- build/core/Makefile | 5 1 file changed, 5 insertions() diff --git a/build/core/Makefile b/build/core/Makefile index --- a/build/core/Makefile b/build/core…

從零開始學習Dify-數據庫數據可視化(五)

概述上一篇文章我們圍繞 Excel 文件展開數據可視化教學&#xff0c;逐步掌握了數據導入、圖表構建和 AI 智能分析。在實際業務環境中&#xff0c;很多數據并不是保存在表格中&#xff0c;而是存儲于數據庫系統中&#xff0c;尤其是最常見的 MySQL。本篇作為本系列的第五篇&…

使用vue2和 element-ui 做一個點餐收銀臺系統前端靜態項目

今天給大家分享一個 關于點餐收銀臺的靜態網站&#xff0c;最近一直在練習前端項目&#xff0c;就使用vue2和 element-ui 做了一個 這樣簡單的 收銀臺系統。先給大家看一下 做出來的樣子。 因為是練習項目 所以頁面功能還是比較簡單的。 使用的技術是&#xff1a; 技術棧 Vu…

Spring Boot自動配置原理深度解析

Spring Boot自動配置原理深度解析 一、自動配置核心概念 1.1 什么是自動配置 Spring Boot自動配置(Auto-Configuration)是其核心特性之一&#xff0c;能夠根據項目依賴自動配置Spring應用程序。例如&#xff1a; 當檢測到H2數據庫依賴時&#xff0c;自動配置內存數據庫當存在Sp…

關于 Apache Ignite 中 Job 調度(Job Scheduling)與沖突控制(Collision Control) 的機制說明

這段內容是關于 Apache Ignite 中 Job 調度&#xff08;Job Scheduling&#xff09;與沖突控制&#xff08;Collision Control&#xff09; 的機制說明。我來為你逐段解析&#xff0c;幫助你深入理解其原理和使用方式。&#x1f50d; 一、核心概念&#xff1a;Job 調度與 Colli…

網絡資源模板--基于Android Studio 實現的課程管理App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情&#xff08;部分) 登錄頁 首頁 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

ROUGE-WE:詞向量化革新的文本生成評估框架

一、ROUGE 基礎與核心局限 ROUGE&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09; 是自動文本摘要與機器翻譯的主流評估指標&#xff0c;由 Chin-Yew Lin 在2004年發表的論文中首次系統提出。其核心變體包括&#xff1a; ROUGE-N&#xff1a;基于…

MGER綜合實驗

一.拓撲二、實驗需求 1、R5為ISP&#xff0c;只能進行IP地址配置&#xff0c;其所有地址均配為公有IP地址; 2、R1和R5間使用PPP的PAP認證&#xff0c;R5為主認證方; R2與R5之間使用ppp的CHAP認證&#xff0c;R5為主認證方; R3與R5之間使用HDLC封裝; 3、R1、R2、R3構建一個MGRE環…

高可用集群Keepalived、Redis、NoSQL數據庫Redis基礎管理

1. 總結負載均衡常見的算法 輪詢 (Round Robin)&#xff1a;按順序將請求依次分配給后端服務器&#xff0c;適合服務器性能相近的場景。 加權輪詢 (Weighted Round Robin)&#xff1a;在輪詢的基礎上&#xff0c;根據服務器的權重分配請求。 隨機 (Random)&#xff1a;隨機選…

【深度學習】獨熱編碼(One-Hot Encoding)

獨熱編碼&#xff08;One-Hot Encoding&#xff09; 在機器學習中&#xff0c;數據預處理是不可或缺的關鍵一步。面對各種非數值類型的分類數據&#xff08;Categorical Data&#xff09;&#xff0c;如何將其轉換為機器學習模型能夠“理解”的語言呢&#xff1f;獨熱編碼&…

Promise完全體總結

我們在上篇文章提到了異步會導致無法通過返回值來獲取函數的執行結果&#xff0c;我們通過傳入一個回調函數的方式&#xff0c;以參數的形式獲取到了我們想要獲取的數據&#xff0c;但是這樣如果需要對數據進行多次操作導致形成回調地獄那種不便于閱讀以及護理的代碼。為了解決…

SpringJDBC源碼初探-DataSource類

一、DataSource接口核心作用 DataSource是JDBC規范的核心接口&#xff0c;位于javax.sql包中&#xff0c;用于替代傳統的DriverManager獲取數據庫連接。Spring框架通過org.springframework.jdbc.datasource包對該接口進行了增強&#xff0c;提供連接池管理、事務綁定等高級特性…

C語言(08)——關于指針(逐漸清晰版)

為了更好地理解本篇文章的知識內容&#xff0c;讀者可以將以下文章作為補充知識進行閱讀 &#xff1a; C語言————原碼 補碼 反碼 &#xff08;超絕詳細解釋&#xff09;-CSDN博客 C語言————二、八、十、十六進制的相互轉換-CSDN博客 C語言————斐波那契數列的理解…

LeetCode 1616.分割兩個字符串得到回文串

給你兩個字符串 a 和 b &#xff0c;它們長度相同。請你選擇一個下標&#xff0c;將兩個字符串都在 相同的下標 分割開。由 a 可以得到兩個字符串&#xff1a; aprefix 和 asuffix &#xff0c;滿足 a aprefix asuffix &#xff0c;同理&#xff0c;由 b 可以得到兩個字符串 …

算法【1】

網址&#xff1a;主站 工具補充 1. sort 函數的使用規則 作用&#xff1a;對容器元素進行排序&#xff0c;默認升序。語法&#xff1a;sort(起始迭代器, 結束迭代器, 比較規則) 前兩個參數是排序范圍&#xff1a;[begin, end)&#xff08;包含begin&#xff0c;不包含end&am…

信創國產Linux操作系統匯總:從桌面到服務器,百花齊放

在數字化浪潮席卷全球的今天&#xff0c;操作系統作為信息產業的基石&#xff0c;其戰略地位日益凸顯。曾經由國外巨頭壟斷的格局正悄然改變——中國本土Linux操作系統歷經多年沉淀&#xff0c;已形成了百花齊放的局面。無論是日常辦公、專業開發&#xff0c;還是關鍵行業應用&…