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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;还是关键行业应用&…