活动介绍

集合操作全解析:从基础数组到泛型集合

立即解锁
发布时间: 2025-08-20 01:13:16 订阅数: 1
PDF

C#面向对象编程与Web服务开发

### 集合操作全解析:从基础数组到泛型集合 在编程的世界里,集合操作是一项非常重要的技能。我们将深入探讨常见的集合类,包括数组、ArrayList 以及泛型集合的使用方法和相关操作。 #### 常用集合类及接口 在开始具体的集合操作之前,先了解一些常用的集合类和它们实现的接口。 | 集合类 | 描述 | | --- | --- | | Array | 为支持强类型数组的语言实现提供基类 | | ArrayList | 使用动态调整大小的数组表示弱类型对象列表 | | SortedList | 表示按键排序的键/值对集合,可通过键和索引访问 | | Queue | 表示先进先出 (FIFO) 的对象集合 | | Stack | 表示后进先出 (LIFO) 的非泛型对象集合 | | Hashtable | 表示基于键的哈希代码组织的键/值对集合 | | CollectionBase | 为强类型集合提供抽象基类 | | DictionaryBase | 为强类型键/值对集合提供抽象基类 | 这些集合类实现了一些重要的接口,如下表所示: | 接口 | 描述 | | --- | --- | | ICollection | 定义所有非泛型集合的大小、枚举器和同步方法 | | IComparer | 公开比较两个对象的方法 | | IDictionary | 表示非泛型键/值对集合 | | IDictionaryEnumerator | 枚举非泛型字典的元素 | | IEnumerable | 公开枚举器,支持对非泛型集合的简单迭代 | | IEnumerator | 支持对非泛型集合的简单迭代 | | IList | 表示可通过索引单独访问的非泛型对象集合 | #### 数组和 ArrayList 的使用 数组是计算机编程中最常见的数据结构之一,它可以存储相同数据类型的元素。数组的元素可以通过索引访问,索引是一个整数,表示元素在数组中的位置。 下面是一个表示一周七天的一维数组示例: | 索引 | 值 | | --- | --- | | 0 | Sunday | | 1 | Monday | | 2 | Tuesday | | 3 | Wednesday | | 4 | Thursday | | 5 | Friday | | 6 | Saturday | 数组还可以是多维的,例如二维数组可以用来表示座位表。以下是一个二维数组的示例: ```mermaid graph LR classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px; classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px; A([Row 0]):::startend --> B(Seat 0):::process A --> C(Seat 1):::process A --> D(Seat 2):::process B --> E(Mary<br>(0,0)):::process C --> F(Bob<br>(0,1)):::process D --> G(Amy<br>(0,2)):::process H([Row 1]):::startend --> I(Seat 0):::process H --> J(Seat 1):::process H --> K(Seat 2):::process I --> L(Jim<br>(1,0)):::process J --> M(Noah<br>(1,1)):::process K --> N(Morgan<br>(1,2)):::process O([Row 2]):::startend --> P(Seat 0):::process O --> Q(Seat 1):::process O --> R(Seat 2):::process P --> S(Jane<br>(2,0)):::process Q --> T(Cindy<br>(2,1)):::process R --> U(Greg<br>(2,2)):::process ``` 在声明数组类型时,可以使用方括号 `[]` 来指定数组。以下是一个声明并初始化一维整数数组的示例: ```csharp int[] intArray = { 1, 2, 3, 4, 5 }; ``` 声明为数组后,可以使用 `Array` 类的属性和方法,例如查询数组的上下界、更新数组元素、复制数组元素等。以下是一个使用 `Array` 类静态方法的示例: ```csharp int[] intArray = { 1, 2, 3, 4, 5 }; Console.WriteLine("Upper Bound"); Console.WriteLine(intArray.GetUpperBound(0)); Console.WriteLine("Array elements"); foreach (int item in intArray) { Console.WriteLine(item); } Array.Reverse(intArray); Console.WriteLine("Array reversed"); foreach (int item in intArray) { Console.WriteLine(item); } Array.Clear(intArray, 2, 2); Console.WriteLine("Elements 2 and 3 cleared"); foreach (int item in intArray) { Console.WriteLine(item); } intArray[4] = 9; Console.WriteLine("Element 4 reset"); foreach (int item in intArray) { Console.WriteLine(item); } Console.ReadLine(); ``` 二维数组的声明和初始化方式如下: ```csharp int[,] twoDArray = { { 1, 2 }, { 3, 4 }, { 5, 6 } }; //Print the index and value of the elements for (int i = 0; i <= twoDArray.GetUpperBound(0); i++) { for (int x = 0; x <= twoDArray.GetUpperBound(1); x++) { Console.WriteLine("Index = [{0},{1}] Value = {2}", i, x, twoDArray[i, x]); } } ``` 在处理集合时,有时在运行时才知道需要包含的项数,这时 `ArrayList` 类就派上用场了。`ArrayList` 的容量会根据需要自动扩展,并且会自动进行内存重新分配和元素复制。以下是一个使用 `ArrayList` 的示例: ```csharp ArrayList nameList = new ArrayList(); nameList.Add("Bob"); nameList.Add("Dan"); nameList.Add("Wendy"); Console.WriteLine("Original Capacity"); Console.WriteLine(nameList.Capacity); Console.WriteLine("Original Values"); foreach (object name in nameList) { Console.WriteLine(name); } nameList.Insert(nameList.IndexOf("Dan"), "Cindy"); nameList.Insert(nameList.IndexOf("Wendy"), "Jim"); Console.WriteLine("New Capacity"); Console.WriteLine(nameList.Capacity); Console.WriteLine("New Values"); foreach (object name in nameList) { Console.WriteLine(name); } ``` 虽然 `ArrayList` 使用起来比数组更方便,但它只能是一维的,并且特定类型的数组比 `ArrayList` 性能更好,因为 `ArrayList` 的元素类型是 `Object`,在添加和检索元素时需要进行类型转换。 #### 数组和 ArrayList 的操作实践 下面通过具体的操作步骤来实践数组和 ArrayList 的使用。 ##### 创建和使用数组 1. 启动 Visual Studio,选择“文件” -> “新建” -> “项目”。 2. 选择控制台应用程序项目,将项目命名为 `activity9_1`。 3. 注意 `Main` 方法接受一个名为 `args` 的字符串数组作为输入参数,该数组包含在启动控制台应用程序时传递的命令行参数。 ```csharp static void Main(string[] args) { } ``` 4. 在 `Main` 方法中添加以下代码,用于显示传递的命令行参数: ```csharp Console.WriteLine( ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

李_涛

知名公司架构师
拥有多年在大型科技公司的工作经验,曾在多个大厂担任技术主管和架构师一职。擅长设计和开发高效稳定的后端系统,熟练掌握多种后端开发语言和框架,包括Java、Python、Spring、Django等。精通关系型数据库和NoSQL数据库的设计和优化,能够有效地处理海量数据和复杂查询。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

【Focas1_2 SDK报警处理机制精讲】:快速故障诊断与解决方案

![Focas1_2 SDK](https://media.springernature.com/lw1200/springer-static/image/art%3A10.1007%2Fs00170-021-08393-5/MediaObjects/170_2021_8393_Fig18_HTML.png) # 摘要 本文系统性地探讨了Focas1_2 SDK报警处理机制,从理论基础到实际应用,全面分析了报警机制的定义、目的、处理流程、信息存储与查询,以及实践应用中的配置管理、通知响应和数据分析。文中还详细论述了高级技巧,包括自定义处理逻辑、系统集成与扩展,以及安全性与隐私保护措施。最后,

STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南

![STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南](http://microcontrollerslab.com/wp-content/uploads/2023/06/select-PC13-as-an-external-interrupt-source-STM32CubeIDE.jpg) # 摘要 STM8点阵屏技术作为一种重要的显示解决方案,广泛应用于嵌入式系统和用户界面设计中。本文首先介绍STM8点阵屏的技术基础,然后深入探讨汉字显示的原理,并着重分析用户界面设计策略,包括布局技巧、字体选择、用户交互逻辑及动态效果实现等。接着,本文详细阐述了STM8点阵屏的编程实践,涵盖开

【BT-audio音频抓取工具比较】:主流工具功能对比与选择指南

# 摘要 本文旨在全面介绍BT-audio音频抓取工具,从理论基础、功能对比、实践应用到安全性与隐私保护等多个维度进行了深入探讨。通过分析音频信号的原理与格式、抓取工具的工作机制以及相关法律和伦理问题,本文详细阐述了不同音频抓取工具的技术特点和抓取效率。实践应用章节进一步讲解了音频抓取在不同场景中的应用方法和技巧,并提供了故障排除的指导。在讨论工具安全性与隐私保护时,强调了用户数据安全的重要性和提高工具安全性的策略。最后,本文对音频抓取工具的未来发展和市场需求进行了展望,并提出了选择合适工具的建议。整体而言,本文为音频抓取工具的用户提供了一个全面的参考资料和指导手册。 # 关键字 音频抓取;

飞利浦监护仪通讯协议深度剖析:构建稳定连接的关键

![飞利浦监护仪通讯协议深度剖析:构建稳定连接的关键](https://cdn.venafi.com/994513b8-133f-0003-9fb3-9cbe4b61ffeb/7e46c2ff-fe85-482d-b0ff-517c45ec1618/aid_inline_img__cae2063c76738929e4ae91ebb994147a.png?fm=webp&q=85) # 摘要 本文全面介绍了飞利浦监护仪通讯协议的概况、理论基础、协议框架解析,以及构建稳定连接的实践技巧。通过对监护仪通讯协议的原理、结构、层次、安全性及错误检测机制的深入分析,提供了在病房监护系统整合、移动医疗和医

【wxWidgets多媒体处理】:实现跨平台音频与视频播放

![【wxWidgets多媒体处理】:实现跨平台音频与视频播放](https://media.licdn.com/dms/image/D4D12AQH6dGtXzzYAKQ/article-cover_image-shrink_600_2000/0/1708803555419?e=2147483647&v=beta&t=m_fxE5WkzNZ45RAzU2jeNFZXiv-kqqsPDlcARrwDp8Y) # 摘要 本文详细探讨了基于wxWidgets的跨平台多媒体开发,涵盖了多媒体处理的基础理论知识、在wxWidgets中的实践应用,以及相关应用的优化与调试方法。首先介绍多媒体数据类型与

【企业级应用高性能选择】:View堆栈效果库的挑选与应用

![View堆栈效果库](https://cdn.educba.com/academy/wp-content/uploads/2020/01/jQuery-fadeOut-1.jpg) # 摘要 堆栈效果库在企业级应用中扮演着至关重要的角色,它不仅影响着应用的性能和功能,还关系到企业业务的扩展和竞争力。本文首先从理论框架入手,系统介绍了堆栈效果库的分类和原理,以及企业在选择和应用堆栈效果库时应该考虑的标准。随后通过实践案例,深入探讨了在不同业务场景中挑选和集成堆栈效果库的策略,以及在应用过程中遇到的挑战和解决方案。文章最后展望了堆栈效果库的未来发展趋势,包括在前沿技术中的应用和创新,以及企业

【调试与性能优化】:LMS滤波器在Verilog中的实现技巧

![【调试与性能优化】:LMS滤波器在Verilog中的实现技巧](https://img-blog.csdnimg.cn/img_convert/b111b02c2bac6554e8f57536c89f3c05.png) # 摘要 本文详细探讨了最小均方(LMS)滤波器的理论基础、硬件实现、调试技巧以及性能优化策略,并通过实际案例分析展示了其在信号处理中的应用。LMS滤波器作为一种自适应滤波器,在数字信号处理领域具有重要地位。通过理论章节,我们阐述了LMS算法的工作原理和数学模型,以及数字信号处理的基础知识。接着,文章介绍了LMS滤波器的Verilog实现,包括Verilog语言基础、模块

【评估情感分析模型】:准确解读准确率、召回率与F1分数

![Python实现新闻文本类情感分析(采用TF-IDF,余弦距离,情感依存等算法)](https://img-blog.csdnimg.cn/20210316153907487.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbGRu,size_16,color_FFFFFF,t_70) # 摘要 情感分析是自然语言处理领域的重要研究方向,它涉及从文本数据中识别和分类用户情感。本文首先介绍了情感分析模型的基本概念和评估指标,然后

MATLAB程序设计模式优化:提升pv_matlab项目可维护性的最佳实践

![MATLAB程序设计模式优化:提升pv_matlab项目可维护性的最佳实践](https://pgaleone.eu/images/unreal-coverage/cov-long.png) # 摘要 本文全面探讨了MATLAB程序设计模式的基础知识和最佳实践,包括代码的组织结构、面向对象编程、设计模式应用、性能优化、版本控制与协作以及测试与质量保证。通过对MATLAB代码结构化的深入分析,介绍了函数与脚本的差异和代码模块化的重要性。接着,本文详细讲解了面向对象编程中的类定义、继承、封装以及代码重用策略。在设计模式部分,本文探讨了创建型、结构型和行为型模式在MATLAB编程中的实现与应用

【游戏物理引擎基础】:迷宫游戏中的物理效果实现

![基于C++-EasyX编写的益智迷宫小游戏项目源码.zip](https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7eae7ef4-7fbf-4de2-b153-48a18c117e42/d9ytliu-34edfe51-a0eb-4516-a9d0-020c77a80aff.png/v1/fill/w_1024,h_547,q_80,strp/snap_2016_04_13_at_08_40_10_by_draconianrain_d9ytliu-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJh