当前位置: 首页 > article >正文

.Net Framework 4/C# 集合和索引器

一、ArrayList 类(集合)

        ArrayList 类位于 System.Collections 命名空间下,它可以动态地添加和删除元素。

        ArrayList 提供了3个构造器,通过这3个构造器可以有3种声明方式:

  • 默认构造器,将会以默认(16)的大小初始化内部的数组,构造器格式如下:
public ArrayList();ArrayList List = new ArrayList();用 Add 方法添加元素:
List.Add(10);
  • 用一个 ICollection 对象来构造,并将该集合的元素添加到 ArrayList 中,构造器格式如下:

public ArrayList(ICollection);ArrayList List = new ArrayList(arrayName);int[] arr = new int[]{1,2,3,4,5};
ArrayList List = new ArrayList(arr);
  • 用指定的大小初始化内部的数组,构造器格式如下:

public ArrayList(int);ArrayList List = new ArrayList(n);ArrayList List = new ArrayList(10);

(一)ArrayList 元素的添加

        向 ArrayList 集合中添加元素时,可以使用 ArrayList 类提供的 Add 方法和 Insert 方法。

  1. Add:将对象添加到 ArrayList 集合的结尾处,例如:List.Add(7);
  2. InsertRange:在指定的位置插入一个集合,例如:List.InsertRange(0,new int[]{1,2});
  3. Insert:将元素插入到 ArrayList 集合的指定索引处,例如:List.Insert(3,7);

        需要注意的是,如果将一个对象(类对象、数组、LIst 本身)用 Add 方法添加到 ArrayList 集合中,输出的是这个对象所在的类的命名空间。所以,ArrayList 为了解决这个问题,提供了一个 AddRange 方法,例如:List.AddRange(new int[]{1, 2, 3, 4, 5, 6, 7, 8});

(二)ArrayList 元素的删除

        在 ArrayList 集合中删除元素时,可以使用 ArrayList 类提供的 Clear 方法、Remove 方法、RemoveAt 方法和 RemoveRange 方法。

  1. Clear 方法:从 ArrayList 中移除所有的元素,例如有:List.Clear();
  2. RemoveRange 方法:从 ArrayList 中移除一定范围的元素,例如有:List.RemoveRange(1,3);
  3. RemoveAt 方法:从 ArrayList 中移除指定索引处的元素,例如有:List.RemoveAt(3);
  4. Remove 方法:从 ArrayList 中移除特定对象的第一个匹配项,例如有:List.Remove(3);

(三) ArrayList 元素的反转

        在 ArrayList 反转元素时,可以使用 ArrayList 类提供的 Reverse 方法。即将元素从后往前输出: List.Reverse();

(四)ArrayList 元素的查找

        查找 ArrayList 集合中的元素时,可以使用 ArrayList 类提供的 Contains 方法、IndexOf 方法和 LastIndexOf 方法。IndexOf 方法和 LastIndexOf 方法的用法与 string 字符串类的同名方法的用法基本相同。

        Contains 方法用来确定某元素是否在 ArrayList 集合中,其语法格式如下:

public virtual bool Contains(Objcect item)

        item:要在 ArrayList 中查找的 Object,该值可以为空引用;

        返回值:如果在 ArrayList 中找到 item,则为 true,否则为 false。

        例如有:

int[] arr = new int[]{1,2,3,4,5,6};
ArrayList List = new ArrayList(arr);
List.Contains(2);

(五)ArrayList 的遍历—— foreach 语句

        foreach 语句用于枚举一个集合的元素,并对该集合中的每个元素执行一次嵌入语句,但是,foreach 语句不应用于更改集合内容,以避免产生不可预知的错误。foreach 语句的基本格式如下:

foreach([类型] [迭代变量名] in [集合类型表达式])
{语句块
}

        例如有:

ArrayList alt = new ArrayList();
alt.Add("1");
alt.Add("2");
alt.Add("3");
alt.Add("4");
alt.Add("5");
foreach(string alt2 in alt)
{Console.WriteLine(alt2);
}

        在 foreach 的表达式中,类型可以用一个 var 来表示,它可以根据值来推断出值的类型的关键字。

(六)ArrayList 类的长度

        ArrayList 集合有两个表示长度的属性,分别是 count 和 capcity,二者的区别就是 count 表示这个集合中实际包含的元素的个数,而 capcity 表示这个集合中可以包含的元素的个数。

二、Hashtable(哈希表/集合) 

        Hashtable 哈希表它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,它的每一个元素都是一个存储在 DictionaryEntry 对象中的键/值对。键不能为空引用,但值可以。

        Hashtable 的构造函数有很多种,这里介绍常用的两种: 

  • 使用默认的初始容量、加载因子、哈希代码提供程序和比较器来初始化 Hashtable 类的新的空实例,语法如下:
public Hashtable()
  • 使用指定的初始容量、默认加载因子、默认哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例,语法如下:
public Hashtable(int capacity)

         capacity:Hahtable 对象最初可包含的元素的近似数目

(一)Hashtable 元素的添加

        向 Hashtable 中添加元素时,可以使用 Hahtable 类提供的 Add 方法,Add 方法用来将带有指定键和值的元素添加到 Hashtable 中,其语法格式如下:

public virtual void Add(Object key, Object value)key:要添加的元素的键
value:要添加的元素的值,该值可以为空引用

        如果指定了 Hashtable 的初始容量,则不用限定向 Hashtable 对象中添加的因子个数,容量会根据加载的因子自动增加。

        需要注意的是,用 Add 方法添加元素时,键是唯一的,不能重复出现,而值可以。同时,可以采用下标的形式添加元素,此时,若哈希表集合中已存在对应下标的键时,新的键对应的值会覆盖旧的值,若不存在对应下标的键时,才会在集合中添加新的元素。例如有:

Hashtable ht = new Hashtable();
ht.Add(1, "张三");
ht.Add(2, "李四");ht.Add(1, "小美");			//添加失败,键 1 已存在采用下标的形式添加时:
ht[3] = "王五";				//会添加新的元素
ht[1] = "小帅";				//会覆盖原先键 1 的值,也就是覆盖掉“张三”

(二)Hashtable 元素的删除

        在 Hashtable 中删除元素时,可以使用 Hashtable 类提供的 Clear 方法和 Remove 方法。

        1、Clear 方法

        该方法用来从 Hashtable 中移除所有元素,其语法格式:

public virtual void Clear()

        2、Remove 方法

        该方法用来从 Hashtable 中移除带有指定键的元素,其格式如下:

public virtual void Remove(Object key)

        key:要移除的元素的键

        例如有:

Hashtable hashtable = new Hashtable();hashtable.Add("sex","男");
hashtable.Remove("sex");

(三)Hashtable 的遍历

        Hashtable 的遍历与数组类似,都可以使用 foreach 语句,但由于 Hashtable 中的元素是一个键/值对,因此需要使用 DictionaryEntry 类型来进行遍历,DictionaryEntry 类型表示一个键/值对的集合。例如有:

Hashtable hashtable = new Hashtable();
hashtable.Add("name","张三");
hashtable.Add("sex","男");
foreach(DictionaryEntry dicEntry in hashtable)
{Console.WriteLine(dicEntry.key + dicEntry.Value);
}

(四)Hashtable 元素的查找

        在 Hashtable 中查找元素时,可以使用 Hashtable 类提供的 Contains 方法、ContainsKey 方法和 ContainsValue 方法。

        1、Contains 方法

        该方法用来确定 Hashtable 中是否包含特定键,其语法格式如下:

public virtual bool Contains(Object key)key:要在 Hashtable 中定位的键
返回值:如果包含则为 true,否则为 false

        2、ContainsKey 方法

        ContainsKey 方法与 Contains 方法实现的功能和语法都相同。

        3、ContainsValue 方法

        该方法用来确定 Hashtable 中是否包含特定值,其语法格式如下:

public virtual bool ContainsValue(Object value)value:要在 Hashtable 中定位的值,该值可以为空引用
返回值:如果包含则为 true,否则为 false

三、List 泛型集合

        List 泛型集合与 ArrayList 集合类似,其基本语法如下:

List<int> ls = new List<int>();

        List 元素的添加、删除、查找和遍历等,都与 ArrayList 集合类似,可参考 ArrayList 集合的内容。但与 ArrayList 不同的是,所添加的元素必须与声明的类型一致,也就是说上述代码声明了一个存储 int 类型的数据的 List 集合,就不能用 Add 方法添加非整型的数据。

四、Dirtionary 泛型集合(键值对集合)

        Dirtionary 泛型集合与 Hashtable 哈希表集合类似,也是采用键值对的方式存储数据,其基本语法如下:

Dirtionary<int, string> dic = new Dirtionary<int, string>();

        Dirtionary 元素的添加、删除、查找和遍历等,都与 Hashtable 集合类似,可参考 Hashtable 哈希表集合的内容。但与 Hashtable 不同的是,所添加的元素必须与声明的类型一致。

        在用 foreach 遍历时,可以用 KeyValuePair(键值对)进行遍历,例如对上述的集合进行遍历:

foreach(KeyValuePair<int string> in dic)
{....
}

五、索引器

        索引器一种常见的场景就是声明一个数组并初始化,通过下标可以访问数组中的元素,此时,这个中括号就是一个索引器,还有一种用法就是在类中声明一个私有的数组以及该数组的属性,在类的外部通过这个类的对象来为属性赋值时,可以通过索引器,让对象以索引的方式操作数组,例如有:

class Person
{private int[] numbers = new int[5];public int[] Numbers{get{return numbers;}set{numbers = value;}}//索引器,让对象以索引的方式操作数组//第一个 int 是数组的类型,表示访问拿到的值是 int 类型//第二个 int 是数组内的元素的类型,int 表示访问数组的整数类型public int this[int index]{get{return numbers[index];}set{numbers[index] = value;}}//此时第二个 string 表示键值是 string 类型的,反推上述的 int 类型数组//Dictionary<string, string> dic = new Dictionary<string, string>()//public string this[string index]// {//     get{return dic[index];}//     set{dic[index] = value;}// }
}使用方法:
static void Main(string[] args)
{Person p = new Person();p[0] = 1;p[1] = 2;p[2] = 3;p[3] = 4;p[4] = 5;
}

相关文章:

.Net Framework 4/C# 集合和索引器

一、ArrayList 类&#xff08;集合&#xff09; ArrayList 类位于 System.Collections 命名空间下&#xff0c;它可以动态地添加和删除元素。 ArrayList 提供了3个构造器&#xff0c;通过这3个构造器可以有3种声明方式&#xff1a; 默认构造器&#xff0c;将会以默认&#xff…...

如何使用Jmeter进行压力测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是压力测试 软件测试中&#xff1a;压力测试&#xff08;Stress Test&#xff09;&#xff0c;也称为强度测试、负载测试。压力测试是模拟实际应用的软硬…...

Grafana-ECharts应用讲解(玫瑰图示例)

工具: MySQL 数据库 MySQL Workbench 数据库管理工具(方便编辑数据) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安装 安装 MySQL社区版安装 MySQL Workbench安装 Grafana在 Grafana 插件中搜索 Business Charts 进行安装以上安装步骤网上教程很多,自行搜…...

洛谷P1591阶乘数码

P1591 阶乘数码 题目描述 求 n ! n! n! 中某个数码出现的次数。 输入格式 第一行为 t ( t ≤ 10 ) t(t \leq 10) t(t≤10)&#xff0c;表示数据组数。接下来 t t t 行&#xff0c;每行一个正整数 n ( n ≤ 1000 ) n(n \leq 1000) n(n≤1000) 和数码 a a a。 输出格式…...

前端vue3 上传/导入文件 调用接口

点击按钮导入&#xff1a; <el-uploadaction"https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15":auto-upload"false":on-change"handleFileChange":show-file-list"false"><el-button type"warning"…...

概述侧边导航的作用与价值

侧边导航的作用与价值&#xff1a;介绍侧边导航的核心优势和用户体验提升点。设计原则&#xff1a;使用表格对比说明侧边导航的三大设计准则。基础实现方法&#xff1a;分步骤讲解静态侧边导航的实现技术。高级交互实现&#xff1a;提供滑动式侧边栏的完整交互解决方案。优化技…...

Python训练营-Day22-Titanic - Machine Learning from Disaster

Description linkkeyboard_arrow_up &#x1f44b;&#x1f6f3;️ Ahoy, welcome to Kaggle! You’re in the right place. This is the legendary Titanic ML competition – the best, first challenge for you to dive into ML competitions and familiarize yourself w…...

FreeCAD:开源世界的三维建模利器

FreeCAD 开发模式 FreeCAD的开发采用多语言协作模式&#xff0c;其核心框架与高性能模块主要使用C构建&#xff0c;而用户界面与扩展功能则通过Python脚本实现灵活定制。具体来说&#xff1a; C核心层&#xff1a;作为基础架构&#xff0c;C负责实现与Open CASCADE Technology…...

指针的定义与使用

1.指针的定义和使用 int point1(){//定义指针int a 10;//指针定义语法&#xff1a; 数据类型 * 指针变量名int * p;cout << "sizeof (int(*)) --> " << sizeof(p) << endl;//让指针记录变量a的地址 & 取址符p &a ;cout << &qu…...

嵌入式里的时间魔法:RTC 与 BKP 深度拆解

文章目录 RTC实时时钟与BKPUnix时间戳UTC/GMT时间戳转换时间戳转换BKP简介BKP基本结构1. 电池供电模块&#xff08;VBAT 输入&#xff09;2. 侵入检测模块&#xff08;TAMPER 输入&#xff09;3. 时钟输出模块&#xff08;RTC 输出&#xff09;4. 内部寄存器组 RTC简介RTC时钟源…...

Java项目中常用的中间件及其高频问题避坑

Java项目中常用的中间件及其高频问题避坑如下: 一、常用中间件分类及作用 1. ​​消息队列中间件​​ ​​作用​​:解耦系统、异步通信、削峰填谷。​​代表产品​​: ​​Kafka​​:高吞吐量流处理,适合日志收集、实时分析。​​RocketMQ​​:金融级可靠性,支持事务消…...

图卷积网络:从理论到实践

图卷积网络&#xff08;Graph Convolutional Networks, GCNs&#xff09;彻底改变了基于图的机器学习领域&#xff0c;使得深度学习能够应用于非欧几里得结构&#xff0c;如社交网络、引文网络和分子结构。本文将解释GCN的直观理解、数学原理&#xff0c;并提供代码片段帮助您理…...

ES 学习总结一 基础内容

ElasticSearch学习 一、 初识ES1、 认识与安装2、 倒排索引2.1 正向索引2.2 倒排索引 3、 基本概念3.1 文档和字段3.2 索引和倒排 4 、 IK分词器 二、 操作1、 mapping 映射属性2、 索引库增删改查3、 文档的增删改查3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.5 批处…...

Maven 构建缓存与离线模式

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...

基于51单片机的光强控制LED灯亮灭

目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体功能&#xff1a; &#xff08;1&#xff09;按下按键K后光敏电阻进行光照检测&#xff0c;LCD1602显示光照强度值&#xff1b; &#xff08;2&#xff09;光照值小于15时&#xff0c;上面2个LE…...

【Linux操作系统】基础开发工具(yum、vim、gcc/g++)

文章目录 Linux软件包管理器 - yumLinux下的三种安装方式什么是软件包认识Yum与RPMyum常用指令更新软件安装与卸载查找与搜索清理缓存与重建元数据 yum源更新1. 备份现有的 yum 源配置2. 下载新的 repo 文件3. 清理并重建缓存 Linux编辑器 - vim启动vimVim 的三种主要模式常用操…...

gopool 源码分析

gopool gopool是字节跳动开源节流的gopkg包中协程池的一个实现。 关键结构 协程池&#xff1a; type pool struct {// The name of the poolname string// capacity of the pool, the maximum number of goroutines that are actually working// 协程池的最大容量cap int32…...

【Survival Analysis】【机器学习】【3】 SHAP可解釋 AI

前言&#xff1a; SHAP&#xff08;SHapley Additive explanations) 是一种基于博弈论的可解释工具。 现在很多高分的 论文里面都会带这种基于SHAP 分析的图&#xff0c;用于评估机器学习模型中特征对预测结果的贡献度. pip install -i https://pypi.tuna.tsinghua.edu.cn/sim…...

ModuleNotFoundError No module named ‘torch_geometric‘未找到

ModuleNotFoundError: No module named torch_geometric’未找到 试了很多方法&#xff0c;都没成功&#xff0c;安装torch对应版本的torch_geometric都不行&#xff0c; 后来发现是pip被设置了环境变量&#xff0c;所有pip文件都给安装在了一个文件夹了 排查建议 1. 检查 p…...

iOS 门店营收表格功能的实现

iOS 门店营收表格功能实现方案 核心功能需求 数据展示&#xff1a;表格形式展示门店/日期维度的营收数据排序功能&#xff1a;支持按营收金额、增长率等排序筛选功能&#xff1a;按日期范围/门店/区域筛选交互操作&#xff1a;点击查看详情、数据刷新数据可视化&#xff1a;关…...

链表题解——环形链表【LeetCode】

141. 环形链表 方法一 核心思想&#xff1a; 使用一个集合 seen 来记录已经访问过的节点。遍历链表&#xff0c;如果当前节点已经存在于集合中&#xff0c;说明链表存在环&#xff1b;否则&#xff0c;将当前节点添加到集合中&#xff0c;继续遍历。如果遍历结束&#xff08;h…...

Cell-o1:强化学习训练LLM解决单细胞推理问题

细胞类型注释是分析scRNA-seq数据异质性的关键任务。尽管最近的基础模型实现了这一过程的自动化&#xff0c;但它们通常独立注释细胞&#xff0c;未考虑批次水平的细胞背景或提供解释性推理。相比之下&#xff0c;人类专家常基于领域知识为不同细胞簇注释不同的细胞类型。为模拟…...

求解插值多项式及其余项表达式

例 求满足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj​)f(xj​) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1​)f′(x1​) 的插值多项式及其余项表达式。 解&#xff1a; 由给定条件&#xff0c;可确定次数不超过3的插值多项式。…...

vue3: bingmap using typescript

项目结构&#xff1a; <template><div class"bing-map-market"><!-- 加载遮罩层 --><div class"loading-overlay" v-show"isLoading || errorMessage"><div class"spinner-container"><div class&qu…...

vue3前端实现导出Excel功能

前端实现导出功能可以使用一些插件 我使用的是xlsx库 1.首先我们需要在vue3的项目中安装xlsx库。可以使用npm 或者 pnpm来进行安装 npm install xlsx或者 pnpm install xlsx2.在vue组件中引入xlsx库 import * as XLSX from xlsx;3.定义导出实例方法 const exportExcel () …...

超大规模芯片验证:基于AMD VP1902的S8-100原型验证系统实测性能翻倍

引言&#xff1a; 随着AI、HPC及超大规模芯片设计需求呈指数级增长原型验证平台已成为芯片设计流程中验证复杂架构、缩短迭代周期的核心工具。然而&#xff0c;传统原型验证系统受限于单芯片容量&#xff08;通常<5000万门&#xff09;、多芯片分割效率及系统级联能力&#…...

【工作记录】接口功能测试总结

如何对1个接口进行接口测试 一、单接口功能测试 1、接口文档信息 理解接口文档的内容&#xff1a; 请求URL: https://[ip]:[port]/xxxserviceValidation 请求方法: POST 请求参数: serviceCode(必填), servicePsw(必填) 响应参数: status, token 2、编写测试用例 2.1 正…...

Dubbo Logback 远程调用携带traceid

背景 A项目有调用B项目的服务&#xff0c;A项目使用 logback 且有 MDC 方式做 traceid&#xff0c;调用B项目的时候&#xff0c;traceid 没传递过期&#xff0c;导致有时候不好排查问题和链路追踪 准备工作 因为使用的是 alibaba 的 dubbo 所以需要加入单独的包 <depend…...

【element-ui】el-autocomplete实现 无数据匹配

文章目录 方法一&#xff1a;使用 default 插槽方法二&#xff1a;使用 empty-text 属性&#xff08;适用于列表类型&#xff09;总结 在使用 Element UI 的 el-autocomplete 组件时&#xff0c;如果你希望在没有任何数据匹配的情况下显示特定的内容&#xff0c;你可以通过自定…...

NLP学习路线图(二十):FastText

在自然语言处理(NLP)领域,词向量(Word Embedding)是基石般的存在。它将离散的符号——词语——转化为连续的、富含语义信息的向量表示,使得计算机能够“理解”语言。而在众多词向量模型中,FastText 凭借其独特的设计理念和卓越性能,尤其是在处理形态丰富的语言和罕见词…...