C#开发-集合使用和技巧(一)常用集合和方法介绍

news2025/7/13 23:51:23

C#开发-集合使用和技巧

(一)常用集合和方法介绍常用集合和方法介绍

  • C#开发-集合使用和技巧
  • 1. 集合基础
    • 集合介绍
    • 集合跟数组对比
  • 2.我们常用的集合类型
    • 列表`List<T>`
    • 键值对集合`Dictionary<TKey,TValue>`
    • 队列`Queue<T>`
    • 其他一些集合类型
      • 堆栈`Stack<T>`
      • 可观察集合`ObservableCollection<T> `
  • 3. 集合常见的接口介绍
      • `IEnumerable<T>` 和 `IEnumerator<T>`
      • `ICollection<T>`
      • `IList<T>`

1. 集合基础

集合介绍

集合是C#中用于存储和管理一组对象的数据结构。它们提供了比基本数据类型更灵活和强大的功能。集合可以动态调整大小,这意味着您不需要预先知道集合中将要存储多少元素。在C#中,集合通常指的是System.Collections命名空间下的类,这些类允许您存储强类型的元素集合。

基本的集合都在System.Collections命名空间中,该命名空间下面有几个命名空间,对集合进行分类

  • System.Collections.Generic通用集合,包含用于定义泛型集合的接口和类,可允许用户创建强类型集合。例如:List<T>Dictionary<TKey, TValue>
  • System.Collections.Concurrent线程安全的集合类,提供几个线程安全的集合类,主要用于多个线程访问一个集合的情况,例如ConcurrentDictionary<TKey,TValue>ConcurrentQueue<T>
  • System.Collections.ObjectModel主要是一些集合的基类,不同功能类型集合的基类,例如:``CollectionObservableCollection`等

集合跟数组对比

  • 数组 是固定大小的,一旦创建了数组,其大小就不能改变。它们在编译时就需要指定大小,并且元素必须是相同类型。
  • 集合 的大小是动态的,可以根据需要增长或缩小。它们提供了更多的灵活性,例如添加、删除和查找元素的能力。

总的来说,集合 的大小是动态的,可以根据需要增长或缩小,大多数集合支持动态添加或移除元素,这跟数组不一样,是固定大小的,一旦创建了数组,其大小就不能改变,这让集合在编程使用的场景更多。

2.我们常用的集合类型

列表List<T>

它是最常用的集合,和数组比较像的是可以通过索引访问,其他的提供了对列表进行搜索、排序和操作的方法。

List<T>提供了许多方便的方法来操作元素,例如:

  • Add(T item):向列表末尾添加一个元素。
  • Remove(T item):从列表中移除第一个匹配的元素。
  • IndexOf(T item):返回指定元素的索引。
  • Sort():对列表中的元素进行排序。

在这里插入图片描述

键值对集合Dictionary<TKey,TValue>

Dictionary<TKey, TValue>是一个键值对的集合,它提供了快速的查找能力。每个键都是唯一的,而值可以重复。它基于哈希表实现,因此查找操作通常是常数时间的。

常用需要频繁查找的情况,可以用于快速查找。

常用方法:

  • Add(TKey key, TValue value):添加一个新的键值对。
  • Remove(TKey key):移除具有指定键的项。
  • TryGetValue(TKey key, out TValue value):尝试获取具有指定键的值。

在这里插入图片描述

队列Queue<T>

Queue<T>实现了先进先出(FIFO)的数据结构。它类似于排队等候的人群,最先进来的元素最先离开。
System.Collections.Concurrent中有线程安全队列ConcurrentQueue<T>,基本用法一致。
常用方法

  • Enqueue(T item):将元素添加到队列的尾部。
  • Dequeue():移除并返回队列头部的元素。
  • TryDequeue(out T item):尝试移除并输出头部元素,成功返回True,失败返回False。

在这里插入图片描述

其他一些集合类型

堆栈Stack<T>

Stack<T>实现了后进先出(LIFO)的数据结构。它类似于一个堆栈,最后入栈的元素最先被弹出。

  • Push(T item):将元素推送到栈顶。
  • Pop():移除并返回栈顶元素。
    在这里插入图片描述

可观察集合ObservableCollection<T>

ObservableCollection<T>表示一个可观察、可监听的动态数据集合,该集合在添加或删除项或刷新整个列表时提供通知。

这个集合常用于WPF中MVVM模式的绑定,跟ListBox、DataGrid等多项控件进行动态绑定,实时更新数据。
在这里插入图片描述

3. 集合常见的接口介绍

下面介绍的接口,可能经常看到,但是不常用到,是集合的最基本的一些接口,很多功能和方法都是基于这些来实现和使用的。

IEnumerable<T>IEnumerator<T>

这是所有集合的基础,它们都实现了IEnumerable<T>接口,这意味着您可以遍历集合中的元素。IEnumerator<T>是C#中集合的迭代器,接口提供了MoveNext(), Current, Dispose(), 和 Reset() 方法,用于迭代集合。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ICollection<T>

这个接口扩展了IEnumerable<T>,并添加了计数、是否为空、同步根和枚举器的创建方法。它还定义了添加、清除、复制到数组、移除范围内的元素和测试是否可修改的方法。

在这里插入图片描述

IList<T>

IList<T>接口继承自ICollection<T>,并且增加了索引器(通过索引访问元素),以及添加、移除和替换特定索引处的元素的方法。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

04-让LLM理解知识 -Prompt

1 Prompt Prompt 可理解为用于指导AI模型生成特定类型、主题或格式内容的文本。在NLP中&#xff0c;Prompt 通常由一个问题或任务描述组成&#xff0c;例如“给我写一篇有关RAG的文章”&#xff0c;这句话就是Prompt。 Prompt赋予了LLM小样本甚至零样本学习的能力。 大模型的…

07 SpringBoot 配置绑定

所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常&#xff0c;我们会把一些配置信息&#xff08;例如&#xff0c;数据库配置&#xff09;放在配置文件中&#xff0c;然后通过 Java 代码去读取该配置文件&#xff0c;并且把配置文件中指定的配置封…

TF-IDF算法:从文本中发现价值的黄金法则

TF-IDF算法 一、简介二、TF-IDF算法原理2.1 词频&#xff08;TF&#xff09;2.2 逆文档频率&#xff08;IDF&#xff09;2.3 TF-IDF的计算 三、TF-IDF算法应用3.1 搜索引擎3.2 文本分类3.3 信息提取3.4 文本摘要 四、TF-IDF算法的改进4.1、TF-IDF算法的改进4.1.1. 基于词的权重…

DC12V升压24V/5A电流 布控球产品应用 升压恒压SL4010耐压40V芯片

随着科技的不断发展&#xff0c;布控球作为一种高效、精准的安全监控设备&#xff0c;被广泛应用于公安、消防、交通等多个领域。然而&#xff0c;布控球在工作过程中需要稳定的电源供应&#xff0c;以保证其正常运行和长期稳定性。因此&#xff0c;一款性能优良的升压恒压芯片…

百度地图3.0截图,下载(解决图形下载偏移的问题)

百度地图应用3.0开发的页面&#xff0c;需要截图并下载的功能。前端采用html2canvas生成base64图片 由于百度地图绘制多边形是svg&#xff0c;而html2canvas不支持生成。不绘制线的截图是正常的&#xff0c;绘制了线条就会出现偏移。以下是对比&#xff0c;上一张是正常的&…

深入解析B树:数据结构、存储结构与算法优势

一、引言 在计算机科学中&#xff0c;数据结构和算法是核心内容。它们的选择和应用直接影响程序的效率和性能。B树&#xff08;B-Tree&#xff09;作为一种自平衡的多叉树数据结构&#xff0c;广泛应用于数据库和文件系统中。本文将详细介绍B树的数据结构模型、存储结构&#…

ssm创意商城-计算机毕业设计源码03663

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

JavaScript快速入门系列-2(JavaScript语言基础)

第二章&#xff1a;JavaScript语言基础 2.1 变量声明&#xff1a;let, const, var2.1.1 变量是什么&#xff1f;2.1.2 var2.1.3 let与const2.1.4 选择哪个关键字&#xff1f; 2.2 数据类型2.2.1 基本数据类型2.2.2 复杂数据类型2.2.3 示例与类型检测 2.3 运算符2.3.1 算术运算符…

C++基础知识(八:STL标准库 Map和multimap )

Map C 标准模板库&#xff08;STL&#xff09;中的 map 容器是一种非常有用的关联容器&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。在 map 中&#xff0c;每个元素都由一个键和一个值组成&#xff0c;其中键是唯一的&#xff0c;而值则可以重复。 基…

来自IEEE编委的发文建议及最佳实践

1.注意关键词(会涉及是否能找到合适的评审人) 2. Intro部分 contribution 通常3-4点 3. 注意文章中的符号使用前后统一 4.需要分析最终的结果(对之后的研究有什么帮助) 5.结论的部分 切忌虎头蛇尾,需要分析优点和缺点 建议未来的研究方向 6.参考文献

2001-2023年上市公司数字化转型测算数据(含原始数据+处理代码+计算结果)

2001-2023年上市公司数字化转型测算数据&#xff08;含原始数据处理代码计算结果&#xff09;&#xff08;吴非&#xff09; 1、时间&#xff1a;2001-2023年 2、来源&#xff1a;上市公司年报 3、指标:行业代码、行业名称、证券简称、是否发生ST或ST或PT、是否发生暂停上市…

max code size exceeded

Warning! Error encountered during contract execution [max code size exceeded] 智能合约编译时提示 contracts/core/CORE.sol:15:1: Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on m…

自研一套带双向认证的Android通用网络库

当前&#xff0c;许多网络库基于Retrofit或OkHttp开发&#xff0c;但实际项目中常需要定制化&#xff0c;并且需要添加类似双向认证等安全功能。这意味着每个项目都可能需要二次开发。那么&#xff0c;有没有一种通用的封装方式&#xff0c;可以满足大多数项目需求&#xff1f;…

什么是端口转发?路由器如何正确的设置端口转发和范围转发?(外网访问必备设置)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 端口转发 📒🚀 端口转发的应用场景💡 路由器如何设置端口转发(示例)💡 端口范围转发(示例)🎯 范围转发的应用场景🛠️ 设置范围转发📝 范围转发实操示例🎈 注意事项 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 …

如何平衡安全访问和办公效率?零信任安全×统一身份才是解决之道

在远程办公、混合办公、跨团队协作日益频繁的今天&#xff0c;企业的业务开展需要支持多种访问接入的需求和场景。如何平衡企业数据的安全访问和办公效率将成为挑战。 在业务的多种接入场景上&#xff0c;企业引入零信任&#xff08;Zero Trust&#xff0c;ZT&#xff09;产品…

鸿蒙用 BuilderParam 实现同一个布局不同内容组件

面通过一个案例展示BuilderParam的具体用法&#xff0c;例如&#xff0c;现需要实现一个通用的卡片组件&#xff0c;如下图所示 卡片中显示的内容不固定&#xff0c;例如 具体实现代码如下&#xff1a; Entry Component struct BuildParamDemo {build() {Column(){Card() {imag…

aac如何转化mp3?超好用的四种音频转换方法!

aac如何转化mp3&#xff1f;AAC格式可能鲜为人知&#xff0c;但实际上它是一种音频文件格式&#xff0c;然而&#xff0c;AAC的应用却不太广泛&#xff0c;这并非偶然&#xff0c;首先&#xff0c;使用AAC需要支付专利费用&#xff0c;这对于个人和公司都可能是一笔不小的开支&…

【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习【一】

文章目录 1. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.3 总结 3. 模拟攻击3.1 环境准备3.2 创建 Mininet 网络拓扑3.2 启动 Ryu 控制器3.3 模拟网络攻击3.4 捕获流量 4. 实时异常检测4.1 在 Ryu 控制器中4.2 在 h2 机器上的实验结果4.3 深度学习模型部署上h2机器 帮助…

Git保姆级教程

目录 Git是什么&#xff0c;为什么要学这个工具&#xff1f; 码云注册并创建仓库 Git安装 查看本地仓库状态 添加到暂存区 提交到本地库 修改文件 版本回退 创建、切换和删除分支 合并分支 克隆远端库到本地 将本地库推送到远端库 命令设置别名 Git是什么&#xf…

Qt 竖排文字研究(一)

在传统的编程环境中&#xff0c;代码的排列方式通常是水平的&#xff0c;这是基于我们日常的阅读习惯和编程规范。但是&#xff0c;当我们尝试打破这一常规&#xff0c;将代码字符以竖排的方式呈现时&#xff0c;发现没有什么现成有效的方式。所以本文基于Qt 的场景视图下&…