C#列表List、HashSet和只读集合介绍

下面是关于C#列表List、HashSet和只读集合的详细介绍:

C#列表List

List 是 .NET 中一个通用的动态数组容器,它能存储任何类型的数据 (T 类型)。它是许多数据存储的良好选择,因为它支持快速的索引查找,提供了几个有用的方法,如 Add()、Remove() 和 Sort()。List 自动处理数组大小,所以是一个不错的集合。

声明和初始化

// 声明一个 List<int> 类型的 List
List<int> list = new List<int>();

// 初始化 List 并添加数据
List<int> list = new List<int> {1, 2, 3};

基本操作

添加和删除元素

list.Add(4); // 添加元素到末尾
list.Insert(0, 5); // 在指定的索引处插入元素

list.Remove(3); // 删除指定元素
list.RemoveAt(0); // 删除指定索引处的元素
list.Clear(); // 清空 List 中所有元素

遍历

foreach(int i in list) {
    Console.WriteLine(i);
}

排序

list.Sort();
list.Reverse(); // 反转 List 中所有元素

检索元素

int index = list.IndexOf(2); // 返回指定元素第一次出现的索引值
bool exists = list.Contains(3); // 判断 List 中是否存在指定元素

HashSet

在 C# 中,HashSet 是一个高效的存储唯一元素的数据结构,使用 HashSet 可以快速地添加、删除元素,并在 O(1) 时间内检查元素是否存在。HashSet 的一个使用场景是去除一个集合中的重复元素。

声明和初始化

// 声明一个 HashSet<int> 类型的 hashSet
HashSet<int> hashSet = new HashSet<int>();

// 初始化 HashSet 并添加数据
HashSet<int> hashSet = new HashSet<int> {1, 2, 3};

基本操作

添加和删除元素

hashSet.Add(4); // 添加元素

hashSet.Remove(3); // 删除指定元素
hashSet.Clear(); // 清空 HashSet 中所有元素

检索元素

bool exists = hashSet.Contains(3); // 判断 HashSet 中是否存在指定元素

只读集合

只读集合是指一种集合,不能修改其的数据。修改集合的唯一方式是重新创建一个新集合。它提供了一个隐藏元素的,只允许读取元素的集合视图。

只读集合类型

只读集合有三种类型:ReadOnlyCollection、ReadOnlyDictionary 和 ReadOnlySet

ReadOnlyCollection

ReadOnlyCollection 类型是 IList 的包装器类型。它提供了一个由 IList 实现的只读集合视图。它支持许多基本操作,例如对集合进行索引,查找元素等操作,但是不允许修改元素。

ReadOnlyDictionary

ReadOnlyDictionary 类型是 IDictionary 的包装器类型。它提供了一个由 IDictionary 实现的只读集合视图。它支持许多基本操作,例如对集合进行索引,查找元素等操作,但是不允许修改元素。

ReadOnlySet

ReadOnlySet 类型是 ISet 的包装器类型。它提供了一个由 ISet 实现的只读集合视图。它支持许多基本操作,例如检查元素是否在集合中,但是不允许修改元素。

声明和初始化

// 声明一个只读列表
List<int> list = new List<int> {1, 2, 3};
ReadOnlyCollection<int> readOnlyList = new ReadOnlyCollection<int>(list);

// 声明一个只读集合
HashSet<int> hashSet = new HashSet<int> {1, 2, 3};
ReadOnlySet<int> readOnlySet = new ReadOnlySet<int>(hashSet);

// 声明一个只读字典
Dictionary<int,string> dictionary = new Dictionary<int,string>();
dictionary.Add(1, "One");
dictionary.Add(2, "Two");
ReadOnlyDictionary<int,string> readOnlyDictionary = new ReadOnlyDictionary<int,string>(dictionary);

以上是关于C#列表List、HashSet和只读集合的详细介绍,希望对你有帮助。

下面是两个使用示例:

示例1:使用List保存学生成绩并进行排序

class Student {
    public string Name { get; set; }
    public int Score { get; set; }
}

List<Student> students = new List<Student>{
    new Student { Name = "Tom", Score = 80 },
    new Student { Name = "Jerry", Score = 90 },
    new Student { Name = "Lily", Score = 70 }
};

students.Sort(delegate(Student s1, Student s2) { return s1.Score.CompareTo(s2.Score); });

foreach(Student s in students) {
    Console.WriteLine("{0}: {1}", s.Name, s.Score);
}

示例2:使用HashSet去除数组中的重复元素

int[] arr = { 1, 2, 2, 3, 3, 4, 5, 5 };
HashSet<int> hashSet = new HashSet<int>(arr);
foreach(int i in hashSet) {
    Console.Write("{0} ", i);
}

输出结果是:1 2 3 4 5。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#列表List、HashSet和只读集合介绍 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • c# 抓取Web网页数据分析

    C# 抓取 Web 网页数据分析攻略 在使用 C# 抓取网页数据进行数据分析的过程中,主要需要做以下几个步骤: 发送 HTTP 请求,并获取网页 HTML 内容。 使用正则表达式或其他技术从 HTML 中提取需要的数据。 分析数据并进行处理,例如存储到数据库,生成报表,或进行可视化等操作。 下面将用示例说明这些步骤。 步骤一:发送 HTTP 请求并获取网页 …

    C# 2023年6月2日
    00
  • unity使用链表实现贪吃蛇游戏

    下面是详细讲解使用链表实现贪吃蛇游戏的完整攻略: 1. 前言 贪吃蛇是一款经典的游戏,它的核心玩法是控制一条蛇,在游戏画面中抓住食物进行食物,并且不断地把自己的身体变长,直到撞到边界或者撞到自己的身体为止。在实现贪吃蛇游戏时,链表数据结构可以很好地解决蛇的增加和删除问题,进而实现游戏的动态更新。本篇攻略主要介绍如何使用Unity中的C#语言实现这样的游戏。 …

    C# 2023年6月3日
    00
  • 基于C#实现简易的键盘记录器

    基于C#实现简易的键盘记录器 简介 键盘记录器是一种记录键盘输入器的程序,它可以记录用户键盘操作的所有内容。本攻略将基于C#实现一款简易的键盘记录器。 构建步骤 1. 获取输入 键盘记录器需要获取用户键盘输入,我们可以使用System.Windows.Forms中的Keyboard来获取。 private void RecordKeystrokes() { …

    C# 2023年6月6日
    00
  • ASP.NET Core中间件会话状态读写及生命周期示例

    ASP.NET Core中间件会话状态读写及生命周期示例 在ASP.NET Core应用程序中,会话状态是一种在多个请求之间保持数据的机制。在本攻略中,我们将详细讲解如何在ASP.NET Core中间件中读写会话状态,并介绍会话状态的生命周期。 步骤一:启用会话状态 在ASP.NET Core应用程序中启用会话状态,您需要在Startup.cs文件中调用Ad…

    C# 2023年5月17日
    00
  • C#操作注册表之Registry类

    有关于C#操作注册表的基本操作,我们可以使用C#自带的Registry类来实现。Registry类封装了创建、读取、修改、删除注册表中的键值等基本操作,并且提供了多个静态方法和属性,方便我们能够快速的实现对注册表的操作。 一、Registry类的命名空间和引用 在使用Registry类的时候,需要在代码文件中引用Registry类所在的命名空间。具体命名空间…

    C# 2023年6月7日
    00
  • asp.net发送邮件示例分享

    接下来我为大家详细讲解“ASP.NET发送邮件示例分享”的完整攻略。 一、前置条件 在进行 ASP.NET 发送邮件的示例分享之前,你需要完成以下两个前置条件: 邮箱设置:首先你需要有一个可用的邮箱账号,并设置好该邮箱的SMTP服务器地址、端口号、登录身份等相关配置信息。 安装Mail类库:为了方便 ASP.NET 开发者使用邮件发送功能,.NET 提供了一…

    C# 2023年6月3日
    00
  • C#中Write()和WriteLine()的区别分析

    C#中Write()和WriteLine()的区别分析 在C#编程中,我们常常会用到Write()和WriteLine()两个方法来输出文本内容。它们的使用方式和输出结果都有些不同,下面我们对它们进行区别分析。 Write()方法 Write()方法是用来输出文本的,它会将输出的文本放在同一行上。 使用方法 我们来看一个基本的输出示例: Console.Wr…

    C# 2023年6月1日
    00
  • C# .Net动态调用webService实现思路及代码

    C# .Net动态调用webService实现思路及代码攻略 在 C# .Net 中,可以使用动态调用的方式调用 webService。本攻略将介绍如何使用 C# .Net 动态调用 webService 的实现思路及代码。 实现思路 使用 C# .Net 动态调用 webService 的实现思路如下: 创建一个代理类。 使用代理类调用 webServic…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部