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

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.mzph.cn/web/26918.shtml

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

相关文章

echarts渲染graph关系图,节点数少的情况,不显示连接边

遇到的问题 echarts渲染graph关系图&#xff0c;当节点数目很少的时候&#xff0c;节点之间的连接边不显示&#xff0c;节点们只是聚集在一起&#xff0c;节点之间有空隙&#xff0c;但是没有连线&#xff0c;我拖拽节点&#xff0c;也没有边。 解决 节点数据的id字段改为字…

架构设计 - MySQL 插入数据性能优化策略

mysql 数据库提高数据插入效率主要可以考虑以下方面&#xff1a; 使用批量插入数据的 SQL 语句&#xff0c;避免使用 for 循环逐条记录插入。 所有插入语句共用一个事务&#xff0c;避免1条SQL语句开1个事务&#xff0c;所有操作都完成后再提交事务。 尽量按照索引递增顺序插入…

Apache Doris单机快速安装(已踩坑)

官方文档&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/get-starting/quick-start/ 环境&#xff1a; 操作系统&#xff1a;CentOS7.6 X86_64 JDK&#xff1a;Oracle jdk1.8.0_351 1.版本下载 从 doris.apache.org 下载相应的 Doris 安装包&#xff0c;并且解压…

Springboot防疫知识科普系统-计算机毕业设计源码03531

摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&#xff0c;防疫成了社会关注的重中…

delphi FDMemTable1.SourceView遍历各行数据,取任意行数据无需Next移动指针了。TFDDatSView

for m : 0 to FDMemTable1.SourceView.Rows.Count - 1 do begin if FDMemTable_SP.SourceView.Rows.ItemsI[m].GetData(0) varNull then Continue; end; 9行7列的值。 FDMemTable1.Data.DataView.Rows.ItemsI[9].ValueI[7]; FDMemTable1.Table.Ro…

RK3568技术笔记七 安装Ubuntu Linux

在新弹出的窗口中&#xff0c;单击“CD/DVD &#xff08;SATA&#xff09;”。如下图所示&#xff1a; 在右侧选择“使用ISO映像文件”。然后单击“浏览”&#xff0c;找到SAIL-RK3568开发板光盘->通用工具->虚拟机Ubuntu->ubuntu-18.04.4-desktop-amd64.iso。最后点击…

探索Vue.js中的文件夹上传解决方案:vue-simple-uploader

在现代Web应用开发中&#xff0c;文件上传是一个常见需求。然而&#xff0c;随着应用复杂性的增加&#xff0c;传统的文件上传方式可能无法满足所有需求&#xff0c;特别是当涉及到文件夹上传和大文件处理时。本文将介绍一个基于Vue.js的解决方案——vue-simple-uploader&#…

MySQL 保姆级教程(二):使用 MySQL 检索数据

使用 MySQL 3.2 选择数据库 使用数据库: 输入: USE 数据库名;输出: Database changed分析: 不返回任何结果&#xff0c;显示某种形式的通知 ​ 例如: 使用 crashcourse 数据库 use crashcourse; 3.3 了解数据库和表 列出所有的数据库: 输入: SHOW DATABASES;输出: --------…

MES系统助力制造业数字化转型

一、MES系统的定义和功能 MES&#xff08;Manufacturing Execution System&#xff09;即制造执行系统&#xff0c;是一种可层级化管理生产活动的软件系统。它可以实现对生产过程全面的监控、调度、控制和优化&#xff0c;提高生产的效率、质量和安全性。MES系统具有以下几个主…

五分钟教会你如何编写一个合格的测试用例

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、测试用例编写依据 测试用例编写应严格根据PRD&#xff08;产品说明书&#xff09; 没有PRD应…

最新区块链论文速读--CCF A会议 ICSE 2024 共13篇 附pdf下载 (2/2)

Conference&#xff1a;International Conference on Software Engineering (ICSE) CCF level&#xff1a;CCF A Categories&#xff1a;Software Engineering/System Software/Programming Languages Year&#xff1a;2024 Num&#xff1a;13 第1~7篇区块链文章请点击此处…

电脑技巧:认识全能绘画软件Krita

目录 一、软件简介 二、软件功能 2.1 强大的画笔引擎 2.2专业色彩管理 2.3 多层编辑与管理 2.4 动画制作 三、软件特点 四、安装说明 五、使用技巧 六、快捷键大全 对于喜欢绘画的朋友来说&#xff0c;Krita 是一款不可多得的绘画工具&#xff0c;它具有开源、免费、…

基于CNN-RNN模型的验证码图片识别

基于CNN-RNN模型的验证码图片识别是一个在计算机视觉和自然语言处理领域的经典应用场景&#xff0c;特别适合处理复杂的验证码&#xff08;如字符连成一条线的或扭曲的验证码&#xff09;和序列数据。这个任务通常包括以下几个步骤&#xff1a; 数据预处理&#xff1a; 图像增强…

Android中球体碰撞代码分享-kotlin,入门版

* 可以产生形变&#xff0c;回弹的小球 * * 整个view的核心&#xff1a; * Scroller函数 * 1.调用scroller.public void startScroll(int startX, int startY, int dx, int dy, int duration); * 在指定时间范围内&#xff0c;startX,startY,会移动dx,dy距离 * * 2.然后调用:in…

RedHat9 | Mariadb数据库的配置与管理

一、实验环境 1、Mariadb数据库介绍 MariaDB数据库管理系统是一个开源的关系型数据库管理系统&#xff0c;与MySQL高度兼容&#xff0c;并提供了更多的功能和性能优化。 起源和背景 MariaDB是MySQL的一个分支&#xff0c;主要由开源社区维护。由MySQL的创始人Michael Widen…

体验亚马逊AIGC——Amazon Bedrock

前言 随着人工智能技术的不断发展&#xff0c;我们已经进入了一个全新的时代&#xff0c;即AI驱动的时代。在这个时代&#xff0c;人工智能已经逐渐成为我们生活中不可或缺的一部分&#xff0c;它可以帮助我们更好地处理各种复杂的问题&#xff0c;提高我们的工作效率&#xff…

UDP的组播发送与接收C语言测试和nc接收组播测试

组播这个东西&#xff0c;很多年前用过一次。本身的原理不复杂&#xff0c;未知的是使用的环境&#xff0c;受使用环境的影响有多大&#xff0c;还是那句废话&#xff0c;具体问题具体分析。 发送端代码multicast.c #include <stdio.h> #include <stdlib.h> #…

鸿蒙开发:【设置任务快照的图标和名称】

设置任务快照的图标和名称 设置任务快照的图标和名称是为了提高用户界面的可视化性和用户体验&#xff0c;以便更好地管理和跟踪应用程序中的任务和功能。通过为每个任务快照设置不同的图标和名称&#xff0c;可以更轻松地区分和识别每个任务的功能。 默认情况下任务快照的图…

python-pandas获取excel表中每个sheet的名称

安装 pandas 首先确保安装了 pandas 和 openpyxl&#xff08;用于处理 Excel 文件&#xff09; pip install pandas openpyxlimport pandas as pd 加载 Excel 文件 excel_file pd.ExcelFile(your_excel_file.xlsx)获取所有工作表的名称 sheet_names excel_file.sheet_na…

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

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