首页 > 编程语言 >C#集合和数据结构,随笔记录

C#集合和数据结构,随笔记录

时间:2024-03-13 11:30:43浏览次数:31  
标签:随笔 C# 元素 Queue 泛型 对象 集合 数据结构 方法

C#集合和数据结构

  • System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表/链表、位数组、哈希表、队列和堆栈)的集合

            

System.Collections.Generic命名空间:

  • 所有集合都直接或间接基于ICollection接口

https://imgs.itxueyuan.com/28211801-aeaddc8243394d34851a127aad881a29.png

  1. 列表类集合类型: 集合类型基于 IList 接口,集合中的每个元素都只包含一个值。列表类集合类型包括:Array, ArrayList, List<T>.

ArrayList或List<T>用于构建复杂的数组或列表集合。相对于Array的容量固定性,ArrayList或List<T>的容量可根据需要自动扩充。ArrayList或List<T>还提供添加、插入或移除某一范围元素的方法

  1. ArrayList列表类型的主要成员:。

用于添加元素对象的方法Add、AddRange、Insert和InsertRange

用于删除元素对象的方法Remove、RemoveAt、RemoveRange和Clear

用于元素对象查找的方法IndexOf、LastIndexOf、Contains和BinarySearch

用于数据排序的方法Sort和Reverse

用于拷贝和转换的方法Clone、CopyTo和ToArray

Capacity属性用于获取或设置可包含的元素数

Count属性用于获取实际包含的元素数

  1. List<T>表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法; List<T>类是对应于 ArrayList 的泛型类。该类使用大小可按需动态增加的数组实现 IList<T>泛型接口, List<T>泛型类的主要成员:

添加元素对象的方法Add、AddRange、Insert和InsertRange

删除元素对象的方法Remove、RemoveAt、RemoveRange、RemoveAll和Clear

元素对象查找的方法BinarySearch、Contains、Exists、Find、FindAll、FindIndexFindLast、FindLastIndex、IndexOf和LastIndexOf

数据排序的方法Sort和Reverse

拷贝和转换的方法ConvertAll<TOutput>和CopyTo

Capacity属性用于获取或设置包含的元素数

Count属性用于获取实际包含的元素数

  1. 字典类集合类型

字典类集合类型基于IDictionary / IDictionary<TKey, TValue > 接口,集合中的每个元素都包含键/值对。字典类集合类型包括:

    1. Hashtable集合类型
    2. Dictionary 集合类型
    3. SortedList集合类型
    4. SortedList<TKey, TValue>集合类型
    5. SortedDictionary<TKey, TValue> 集合类型

1.1 Hashtable哈希表

  • Hashtable表示键/值(key/value)对的集合,这些键/值对根据键的哈希代码进行组织
  • Hashtable中key和value键值均为object类型
  • Hashtable集合中每个键(key)必须是唯一的,并且添加后,键(key)就不能更改。键(key)不能为 null 引用,但值(value)可以.
  • Hashtable主要成员如下:

添加元素对象的方法Add

删除元素对象的方法Remove和Clear

元素对象查找的方法Contains、ContainsKey和ContainsValue

拷贝和转换的方法CopyTo

Count属性用于获取包含在Hashtable中的键/值对的数目

Keys属性用于获取键的集合

Values属性用于获取值的集合

           

  • 可以利用foreach语句和DictionaryEntry类型遍历Hashtable中每个键/值对:

  

1.2 字典Dictionary<tkey,Tvalue>

  • Dictionary<TKey, TValue>泛型类表示键/值(key/value)对的集合。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • Dictionary<TKey, TValue>泛型类提供了从一组键到一组值的映射
  • Dictionary<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成
  • Dictionary<TKey, TValue>泛型类的主要成员:

添加元素对象的方法Add

删除元素对象的方法Remove、Clear

元素对象查找的方法Contains、ContainsKey和ContainsValue

Count属性获取包含在Dictionary中的键/值对的数目

Item属性获取或设置与指定的键相关联的值

Keys属性获取键的集合

Values属性获取值的集合

  • 可以利用foreach语句和KeyValuePair<TKey, TValue>类型遍历Dictionary<TKey, TValue>中每个键/值对

1.3 排序列表sortedList

  • SortedList表示键/值(key/value)对的集合
  • SortedList<TKey, TValue>是其泛型版本,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedList集合中每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对
  • SortedList集合中每个键(key)必须是唯一的。键不能为 null 引用,但值可以
  • SortedList类的主要成员:

添加元素对象的方法Add

删除元素对象的方法Remove、RemoveAt和Clear

元素对象查找的方法Contains、ContainsKey、ContainsValue、IndexOfKey和ndexOfValue

对象设置和获取的方法GetByIndex、GetKey、GetKeyList、GetValueList和SetByIndex

拷贝和转换的方法CopyTo

Capacity属性用于获取或设置可包含的元素数

Count属性用于获取包含的键/值对的数目

Keys属性用于获取键的集合;Values属性用于获取值的集合

1.4 泛型排序列表SortedList<TKey, TValue>

  • SortedList<TKey, TValue>泛型类表示键/值(key/value)对的集合,以基于键的排序顺序维护元素,并可按照键和索引访问。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedList<TKey, TValue>泛型类提供了从一组键到一组值的映射。SortedList<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成。通过键可以快速检索值。SortedList<TKey, TValue>中的每个键必须是唯一的。键(key)不能为空,但值(value)可以
  • SortedList<TKey, TValue>泛型类的主要成员:

-添加元素对象的方法Add

-删除元素对象的方法Remove、RemoveAt和Clear

-元素对象查找的方法ContainsKey、ContainsValue、IndexOfKey和IndexOfValue

-Capacity属性用于获取或设置可包含的元素数

-Count属性用于获取包含的键/值对的数目

-Keys属性用于获取键的集合;Values属性用于获取值的集合

1.5 排序字典SortedDictionary<TKey, TValue>

  • SortedDictionary<TKey, TValue>泛型类表示键/值(key/value)对的集合,以基于键的排序顺序维护元素。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedDictionary<TKey, TValue>泛型类提供了从一组键到一组值的映射。SortedDictionary<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成。通过键可以快速检索值。SortedDictionary <TKey, TValue>中的每个键必须是唯一的。键(key)不能为空,但值(value)可以
  • SortedDictionary<TKey, TValue>泛型类的主要成员:

-添加元素对象的方法Add

-删除元素对象的方法Remove和Clear

-元素对象查找的方法ContainsKey和ContainsValue

-Count属性用于获取包含的键/值对的数目

-Keys属性用于获取键的集合;Values属性用于获取值的集合

          

  1. 6队列集合类型Queue类和Queue<T>泛型类
  • Queue类和Queue<T>泛型类表示对象的先进先出(FIFO,First In First Out)集合
  • Queue类表示对象的先进先出(FIFO,First In First Out)集合。存储在 Queue 中的对象在一端(Queue 的结尾处)插入,从另一端(Queue的开始处)移除
  • Queue类和Queue<T>泛型类的主要成员:

-queue方法将对象添加到Queue的结尾处

-Peek方法返回位于Queue开始处的对象

-Dequeue方法移除并返回位于Queue开始处的对象

-Clear方法从Queue中移除所有对象

-Contains方法确定某元素是否在Queue中

-Count属性用于获取元素的数目

以上demo,输出结果:10 20 30 40,如下图是队列操作的示意图:

1.7 HashSet<T>

//HashSet<T>泛型类是set 集合, 是一组不重复出现且无特定顺序的元素,如果添加的元素集合中已经存在,则不会添加进去,也不会报错.
//用于集合运算的方法UnionWith(并集)、IntersectWith(交集)、ExceptWith(差集)和SymmetricExceptWith(对称差集)
HashSet<int> even = new HashSet<int> { 1, 2, 4, 6, 8,9,10,1 };
//添加不重复的元素,若集合内有该元素,不添加
even.Add(6);
HashSet<int> odd = new HashSet<int> { 1, 3, 5, 7, 9,10,11 };
//并集
even.UnionWith(odd);
//排序
even = even.OrderBy(i => i).ToHashSet();
//删除元素
even.Remove(6);
//按条件删除元素
even.RemoveWhere(i => i % 2 == 0);
//CopyTo,将集合复制到一个指定的数组中,了解下
int[] numbs = new int[] { 10, 20, 30,40,50,60,70,80,90,100 };
even.CopyTo(numbs,numbs.Length-even.Count);

标签:随笔,C#,元素,Queue,泛型,对象,集合,数据结构,方法
From: https://blog.csdn.net/weixin_44279482/article/details/136644779

相关文章

  • chrome谷歌浏览器安装vue插件
    5.1https://chrome.zzzmh.cn/搜索vue下载Vue.jsDevtools(本人使用推荐下载)【网址极简插件】5.2下载解压得到chrome.zzzmh.cn.crx的文件5.3打开谷歌浏览器右上角三个点-更多工具-扩展程序--打开右上角的开发者模式按钮5.4将5.2的解压文件拖进来安装,安装好了以后......
  • k3s中使用helm安装rancher
    k3s中使用helm安装rancher参考官方文档:https://ranchermanager.docs.rancher.com/zh/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster版本: docker:24.0.7 rancher:2.8.2 k3s: v1.27.11+k3s1 helm: v3.9.0此处省略docker,k3s,helm的安装过程1.首......
  • JavaScript学习--splice()函数入门与精通
    一、splice入门splice方法:通过删除(两个参数)或替换现有元素(三个参数)或者原地添加新的元素(三个参数)来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。参数:index——必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置(从1开始)。howmany——必需......
  • 万字带你了解ChatGLM
    本文分享自华为云社区《【云驻共创】华为云之昇思MindSpore大模型专题(第二期)-第一课:ChatGLM》,作者:愚公搬代码。前言1.昇思MindSpore昇思MindSpore是华为公司推出的一款全场景AI计算框架。它提供了自动微分、分布式训练和推理、模型部署等功能,支持多种硬件平台,包括CPU、GPU和As......
  • 编译GreatSQL with RocksDB引擎
    GreatSQL里也能用上RocksDB引擎1.前言RocksDB是基于Facebook开源的一种支持事务的、高度可压缩、高性能的MyRocks存储引擎,特别适用于高度压缩和大容量的数据。以下是一些关键特点:高性能:LSM树结构使得RocksDB在写入密集型负载下表现卓越。它能够处理大量的写入操作,并且......
  • 56_packer的使用
    JSONTemplateStructure模板是一个JSON对象,它有一组配置Packer各个组件的键。下面列出了模板中可用的密钥。每把钥匙都要注明是否需要。builders(必需)是一个或多个对象的数组,用于定义将用于为此模板创建机器映像的构建器,并配置这些构建器中的每一个。有关如何定义和配置生成器......
  • Windows右键菜单管理程序:ContextMenuManager
    前言ContextMenuManager是一款由中国人开发免安装的纯粹的Windows右键菜单管理开源程序,可以非常方便的管理Windows电脑的右键菜单,轻松去除不必要的或者是流氓的菜单选项,使你的电脑更加的干净、清爽。程序使用非常简单,没有任何门槛,我感觉非常棒,极力推荐道友们下载使用。Github......
  • 浅谈JavaScript
    第一章JavaScript学前准备1.JavaScript简介(1)1992年Nombas的scriptease奠定了JavaScript思想理念;(2)受当时网速的限制,很多操作过程很漫长,如用户注册个账号,先提交到服务器去验证合法性,然后再返回给用户。Netscape发现了这个问题并开发了JavaScript语言,同时微软也开发了一个叫J......
  • JS 监听浏览器各个标签间的切换-visibilitychange事件介绍
    文章目录一、JS监听浏览器各个标签间的切换二、document的可见性属性三、示例:监听标签,控制视频播放与暂停一、JS监听浏览器各个标签间的切换以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现......
  • 【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流
    文章目录前言1.准备数据集和数据预处理1.1数据集选择1.2数据预处理1.3评估指标PSNR和SSIM1.3.1PSNR1.3.2SSIM2.定义网络结构3.设置参数并训练模型3.1参数设置3.2模型训练4.测试训练好的模型5.用训练好的SRCNN模型超分自己的图像数据6.其他补充6.1特征图......