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() 方法,用于迭代集合。

    //
    // 摘要:
    //     公开枚举器,它支持对指定类型的集合进行简单迭代。
    //
    // 类型参数:
    //   T:
    //     要枚举的对象的类型。
    public interface IEnumerable<out T> : IEnumerable
    {
        //
        // 摘要:
        //      返回一个枚举器,该枚举器可以用来遍历集合。
        //
        // 返回结果:
        //    一个枚举器,可用于遍历集合。
        IEnumerator<T> GetEnumerator();
    }
    
    
     //
 // 摘要:
 //     支持对泛型集合进行简单迭代。
 //
 // 类型参数:
 //   T:
 //     要枚举的对象的类型。
 public interface IEnumerator<out T> : IEnumerator, IDisposable
 {
     //
     // 摘要:
     //    获取枚举器当前位置的集合中的元素。
     //
     //
     // 返回结果:
     //      枚举器当前位置的集合中的元素。
     T Current { get; }
 }

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

ICollection<T>

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

在这里插入图片描述

IList<T>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

修改vscode的主题颜色

1、首选项--主题--颜色主题 2、选择一个喜欢的颜色主题 这样就可以了。

工作实践:11种API性能优化方法

一、索引优化 接口性能优化时&#xff0c;大家第一个想到的通常是&#xff1a;优化索引。 确实&#xff0c;优化索引的成本是最小的。 你可以通过查看线上日志或监控报告&#xff0c;发现某个接口使用的某条SQL语句耗时较长。 此时&#xff0c;你可能会有以下疑问&#xff…

Mistral AI最新力作——Mistral Large媲美GPT-4

Mistral AI自豪地宣布&#xff0c;他们的最新力作——Mistral Large&#xff0c;已经正式面世。这款尖端的文本生成模型不仅在多语言理解上表现出色&#xff0c;更在推理能力上达到了顶级水平。Mistral Large能够处理包括文本理解、转换和代码生成在内的复杂多语言推理任务。 M…

go-admin-ui开源后台管理系统华为云部署

1.华为云开通8000与9527端口 2.编译 编译成功 3.发布到远程服务器 4.登陆华为云终端 5.安装Nginx 6.查看服务启动状态 7.添加网站 添加与修改配置www-data 改为 www 自定义日志输出格式 添加网站配置文件go_admin_ui.conf 添加如下内容: location 下的root指向网站文件夹 修…

former系列在时间序列预测任务上的研究综述

总&#xff1a;基于Transformer的LSTF解决方案 现有基于Transformer的LSTM解决方案设计要素总结如下&#xff1a; 从图中可以看出&#xff0c;Transformer在时序中应用具体包含以下几个步骤&#xff1a; 1&#xff09;时序分解&#xff1a;对于数据处理&#xff0c;TSF中0均…

zookeeper + kafka消息队列

zookeeper kafka 消息队列 一、消息队列简介 1、什么是消息队列 消息队列&#xff08;Message Queue&#xff09;是一种用于跨进程或分布式系统中传递消息的通信机制。消息队列在异步通信、系统解耦、负载均衡和容错方面具有重要作用。 &#xff08;1&#xff09;特性 异步…

“打造智能售货机系统,基于ruoyi微服务版本生成基础代码“

目录 # 开篇 1. 菜单 2. 字典配置 3. 表配置 3.1 导入表 3.2 区域管理 3.3 合作商管理 3.4 点位管理 4. 代码导入 4.1 后端代码生成 4.2 前端代码生成 5. 数据库代码执行 6. 点位管理菜单顺序修改 7. 页面展示 8. 附加设备表 8.1 新增设备管理菜单 8.2 创建字…

GBDT算法详解

GBDT算法详解 梯度提升决策树&#xff08;Gradient Boosting Decision Trees&#xff0c;GBDT&#xff09;是机器学习中一种强大的集成算法。它通过构建一系列的决策树&#xff0c;并逐步优化模型的预测能力&#xff0c;在各种回归和分类任务中取得了显著的效果。本文将详细介…

【mysql 安装启动失败】 没有网下 libssl.so.10 not found 如何解决?

问题描述&#xff1a; libssl.so.10 > not found libcrypto.so.10 > not found [rootmysql tools]# ls -l /usr/sbin/mysqld -rwxr-xr-x. 1 root root 64290024 Sep 14 2022 /usr/sbin/mysqld [rootmysql tools]# ldd /usr/sbin/mysqldlinux-vdso.so.1 (0x00007fff97105…

Blazor 组件:创建、生命周期、嵌套和 UI 集成

在本文中&#xff0c;您将获得以下问题的答案。 什么是 Blazor 组件&#xff1f;如何使用组件&#xff1f;Blazor 组件的生命周期是什么&#xff1f;我们可以从一个组件调用另一个组件吗&#xff1f;如何创建 Blazor 组件&#xff1f;在组件中哪里写 C# 代码&#xff1f; 什么…

碳化硅陶瓷膜的生产工艺和应用

一、生产工艺 碳化硅陶瓷膜的生产工艺多样&#xff0c;其中浸渍提拉法和喷涂法为两大主流技术。 浸渍提拉法 浸渍提拉法是一种广泛应用的制备方法。其过程主要包括&#xff1a;先将陶瓷颗粒或者聚合物前体分散在水或有机溶剂中&#xff0c;形成均质稳定的制膜液。随后&#xff…

深入探索C++中的AVL树

引言 在数据结构和算法的世界里&#xff0c;平衡二叉搜索树&#xff08;Balanced Binary Search Tree, BST&#xff09;是一种非常重要的数据结构。AVL树&#xff08;Adelson-Velsky和Landis发明的树&#xff09;就是平衡二叉搜索树的一种&#xff0c;它通过自平衡来维护其性质…

ELK+Filebeat+kafka+zookeeper构建海量日志分析平台

ELK是什么&#xff08;What&#xff09;&#xff1f; ELK组件介绍 ELK 是ElasticSearch开源生态中提供的一套完整日志收集、分析以及展示的解决方案&#xff0c;是三个产品的首字母缩写&#xff0c;分别是ElasticSearch、Logstash 和 Kibana。除此之外&#xff0c;FileBeat也是…

海外版coze前端代码助手

定位 解决前端同事的开发问题 参数配置 测试 支持 最屌的大模型及语音播报。 体验地址 海外版前端代码助手 需要魔法才能体验油

索尼MXF文件断电变2G恢复方法(PXW-Z280V)

PXM-Z280V算是索尼比较经典的机型&#xff0c;也是使用MXF文件格式的机型之一。近期接到很多例索尼MXF量突然不正常的案例&#xff08;如变成512字节或者2G&#xff09;&#xff0c;下面来看下这个案例。 故障存储: 128G存储卡 /文件系统&#xff1a;exFAT 故障现象: 客户反…

Centos SFTP搭建

SFTP配置、连接及挂载教程_sftp连接-CSDN博客1、确认是否安装yum list installed | grep openssh-server 2、创建用户和组 sudo groupadd tksftpgroup sudo useradd -g tksftpgroup -d /home/www/tk_data -s /sbin/nologin tksftp01 sudo passwd tksftp013. 配置SFTP注意&a…

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…

国产化ETL产品必备的特性(非开源包装)

ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行抽取、清洗&#xff08;净化&#xff09;、转换、装载、标准、集成&#xff08;汇总&#xff09;...... 最后加载到数据仓库或数据集市中&#xff0c;成为联机分析处理、数据挖掘的基础。…

关键属性描述ASYNC_REG

关键属性描述 属性信息 本章提供有关XilinxVivadoDesign Suite属性的信息。条目 每个属性包含以下信息&#xff08;如适用&#xff09;&#xff1a; •物业说明&#xff0c;包括其主要用途。 •支持该特性的Xilinx FPGA体系结构&#xff0c;包括UltraScale™ 架构设备&#xff…

数据结构【二叉树】

前言 我们在前面学习了使用数组来实现二叉树&#xff0c;但是数组实现二叉树仅适用于完全二叉树&#xff08;非完全二叉树会有空间浪费&#xff09;&#xff0c;所以我们本章讲解的是链式二叉树&#xff0c;但由于学习二叉树的操作需要有一颗树&#xff0c;才能学习相关的基本…