C#学习笔记 常用的集合

2023-11-10

列表List< T>

列表List< T>实现了IList、ICollection、IEnumberable、IList接口。可以向该列表中动态的添加、删除、查找元素。如果列表中的元素满了,会动态分配一个容量是原来两倍的列表。为了避免多次重新分配内存带来的系统开销,如果事先知道所使用的列表的最大值,可以为列表预先分配足够的容量。

使用Capacity属性读取和设置容量。如果不需要添加元素,可以使用TrimExcess()方法,去掉不需要的容量。

可以使用一个已有的数组初始化列表,或者也可以使用初始值设定语法。

 int[] array = { 1, 2, 3, 4, 5 };
 List<int> list = new List<int>();
 //或者直接List<int> list = new List<int>(){ 1, 2, 3, 4, 5 };

添加元素使用Add()方法。也可以使用AddRange()方法一次性添加多个元素。

插入元素使用Insert()方法。也可以使用InsertRange()方法一次性插入多个元素。

列表实现了IList接口,而IList接口中实现了索引器。因此列表可以直接使用索引器访问元素,就像数组一样。

可以用Count属性查看列表有多少个元素。

还可以利用ForEach()方法对集合中的每一项执行一些操作。该方法的参数是一个委托:Action< T> action。例如,输出列表中的每一个数字。

static void Main(string[] args)
{
    int[] array = { 1, 2, 3, 4, 5 };
    List<int> list = new List<int>(array);
    list.ForEach(e => Console.WriteLine(e));
}

删除元素使用RemoveAt()方法,既可以传递下标删除指定索引处的元素,也可以传递要删除的元素。但是一般情况下前者要更高效一点,因为后者需要先定位元素然后才能删除。还可以利用RemoveRange()方法一次性删除多个元素。

常用的查找方法有IndexOf()、LastIndexOf()、FindIndex()、FindLastIndex()、Find()、FindLast()。可以使用Exists()方法查看某元素是否在集合中存在。

排序可以使用Sort()方法。重载的Sort()方法可以添加一个比较器, 以实现自定义排序。

可以使用ConvertAll()方法,将一种类型的列表转换为另外一种类型的列表。

队列Queue< T>

队列也就是先进先出(FIFO)的列表,队列实现了ICollection和IEnumberable< T>接口,但是没有实现ICollection< T>接口,因此没有Add()和Remove()方法。也没有实现IList< T>接口,因此不能使用索引器访问。

队列常用的方法和属性如下:

方法或属性 说明
Count 返回队列的元素个数
Enqueue 该方法在队列末尾添加一个元素
Dequeue 该方法返回并删除队列头的元素
Peek 该方法仅返回队列头元素,不删除元素
TrimExcess 该方法重新设置队列的容量,去除未使用空间

栈Stack< T>

栈和队列类似,不过是后进先出(LIFO)的列表。常用的方法或属性如下:

方法或属性 说明
Count 返回栈中元素的个数
Push 将一个元素入栈
Pop 将一个元素出栈并返回
Peek 返回栈顶元素但不删除
Contains 判断某个元素是否在栈中

双向链表 LinkedList< T>

前面的列表List是用数组实现的。在随机访问和想末尾添加元素时比较快。这里的链表则是在链表中间插入元素比较快。

具体方法和列表差不多。详细方法可以查看MSDN。

有序列表SortedList< TKey,TValue>

该集合存储键值对,并按键排序。注意每个键只能对应一个值。而且如果要访问的键不存在,就会抛出异常。因此可以使用Contain()方法先判断是否存在某键或者是用TryGetValue()方法尝试获取值,这样就不会发生异常。

字典Dictionary< TKey,TValue>

字典类存储键值对,内部使用散列法实现,主要用来实现键值对的高效查找。用作键的类型需要重写GetHashCode()和Equals()方法,避免在执行散列函数时出现意外情况。

集合ISet< T>

集合表示没有重复内容的Collection。常用的有无序集合HashSet< T>和有序集合SortedSet< T>。集合含有一些方法可以进行集合的交、并、差等运算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#学习笔记 常用的集合 的相关文章

  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 基于混沌搜索策略的鲸鱼优化算法-附代码

    基于混沌搜索策略的鲸鱼优化算法 文章目录 基于混沌搜索策略的鲸鱼优化算法 1 鲸鱼优化算法 2 改进鲸鱼优化算法 2 1 混沌反向学习初始化策略 2 2 收敛因子和惯性权重混沌扰动协同更新策略 2 3最优个体混沌搜索策略 3 实验结果 4
  • ajax传php变量,使用Ajax将Javascript变量传递给PHP

    目前 我正在使用Ajax来开发现有脚本 这是我以前从未使用过的东西 我在javascript文件中设置了一个变量 该变量从页面上的输入字段获取其值 我只需要使用Ajax将其发布到我的PHP页面 不知道从哪里开始 我不确定您需要查看什么代码
  • 基于支持向量机SVM的沪深300股票预测股票涨跌方向

    结果参考 https www bilibili com video BV1nY411z7Kk spm id from 333 999 0 0 附完整代码 数据
  • Linux中FTP配置文件详解

    Linux中FTP的配置文件是 etc vsftpd vsftpd conf 1 登录和对匿名用户的设置 anonymous enable YES 设置是否允许匿名用户登录FTP服务器 默认为YES local enable YES 是否允
  • 从五个方面参与孩子的编程教育

    很多家长在考虑是否让孩子学习编程的时候 会因为自己不懂编程 觉得无法参与孩子的学习过程 也不知道如何检验孩子的学习成果 内心的一系列不确定性 导致再三犹豫 其实 少儿编程的学习也是有阶段性的 家长最重要的责任往往不是所谓的 辅导 而是在启蒙
  • js逆向-无限debugger的原理及绕过

    前言 转载自 爬虫从入门到精通 12 js调试中的一些问题 无限debugger 调试干扰 内存爆破 转载自 js 无限debugger 的原理 以及解决办法 文章目录 前言 一级目录 二级目录 三级目录 一 调试检测 1 无法打开f12
  • 拖拽更新层级分类、更新层级id树:

    program mycs java description 拖拽编辑试题分类标签参数数据类 author wupeiguo create 2020 03 17 11 30 Data Accessors chain true ApiModel
  • CCS软件的Graph功能

    如何正确使用CCS自带绘图Graph功能 Single Time使用演示 点击菜单栏Tools gt Graph gt Single Time 如图所示 点开后出现如下的对话窗口 下面对里面的每一项参数进行一下说明 Acquisition
  • linux系统PC机安装(非虚拟机,以centos为例)

    centos介绍 CentOS CommunityEnterprise Operating System 中文意思是 社区企业操作系统 我们有很多人叫它 社区企业操作系统 不管你怎么叫它 它都是linux的一个发行版本 CentOS并不是全
  • C语言指针知识点(一):字符指针(char *)及其格式输出(%c%d%s等)

    类型是分配内存块大小的别名 即类型 int double char 的作用就是分配相对应大小的内存 并给程序员一个名字 int double char 方便操作 指针也是一种数据类型 定义时可以对其赋值 可赋任意地址值 但习惯赋值为NULL
  • Windows10下VTR.7中VPR项目的运行

    下载VTR7和Visual Studio2022 点击sln文件 打开vpr工程 项目升级 vpr为VS2010的项目 需要先对工程文件升级后再编译 取消较小类型检查 上方菜单 项目 VPR属性 C C 代码生成 编译链接 运行 命令行运行
  • Elasticsearch Java 操作之后查询数据未及时更新

    在请求里加这个参数 request setRefreshPolicy WriteRequest RefreshPolicy IMMEDIATE 例如 public boolean saveOrUpdate String indexName
  • ListView具有多种item布局——实现微信对话列 .

    这篇文章的效果也是大家常见的 各种通讯应用的对话列表都是这种方式 像微信 whatsapp 易信 米聊等 我们这篇文章也权当为回忆 形成简单的笔记 这篇文章参考了2009年Google IO中的 TurboChargeYourUI How
  • linux启动,挂栽,共享,忘记密码的解决方法

    Linux修改linux的启动方式 修改linux启动方式 文本方式或xwindow方式 vi etc inittab 找到id x initdefault 一行 x 3为文本方式 x 5为xwindow方式 重启机器即可生效 mount用
  • Leetcode5438. 制作 m 束花所需的最少天数——另类的二分法

    文章目录 引入 二分法题解 制作 m 束花所需的最少天数 二分法题解 分割数组的最大值 二分法题解 两球之间的磁力 引入 之前在周赛遇到5438 制作 m 束花所需的最少天数 给你一个整数数组 bloomDay 以及两个整数 m 和 k 现
  • YOLOV5改进-添加EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

    在YoloV5中添加EIoU SIoU AlphaIoU FocalEIoU Wise IoU 2023 2 7 更新 yolov5添加Wise IoUB站链接 重磅 YOLO模型改进集合指南 CSDN yolov5中box iou其默认用
  • java 16进制与图片互转

    十六进制转成图片 十六进制转成图片 author Administrator public static void saveToImgFile String src String output if src null src length
  • 使用JMS进行消息传递

    你需要什么 大约 15 分钟 IntelliJ IDEA或其他编辑器 JDK 1 8或更高版本 Maven 3 2 你会建立什么 本指南将指导您完成使用 JMS 代理发布和订阅消息的过程 您将构建一个应用程序 该应用程序使用Spring的
  • 关于项目属性书写应该严重注意的问题

    这样马马虎虎不注意属性的书写细节 会导致属性查询或者注入失败 public class Goods private Integer goodsId private String goodsName private String goodsT
  • C#学习笔记 常用的集合

    列表List lt T gt 列表List lt T gt 实现了IList ICollection IEnumberable IList接口 可以向该列表中动态的添加 删除 查找元素 如果列表中的元素满了 会动态分配一个容量是原来两倍的列