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

news2025/6/9 0:08:48

一、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;
}

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

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

相关文章

如何使用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 进行安装以上安装步骤网上教程很多,自行搜…

前端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"…

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…

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

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

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

图卷积网络&#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 的三种主要模式常用操…

【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…

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

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

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…

超大规模芯片验证:基于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…

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

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

力扣面试150题--除法求值

Day 62 题目描述 做法 此题本质是一个图论问题&#xff0c;对于两个字母相除是否存在值&#xff0c;其实就是判断&#xff0c;从一个字母能否通过其他字母到达&#xff0c;做法如下&#xff1a; 遍历所有等式&#xff0c;为每个变量分配唯一的整数索引。初始化一个二维数组 …