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#中如何为枚举类型添加描述方法【小技巧】

    要为C#中的枚举类型添加描述方法,可以采用以下方法: 1.使用System.ComponentModel.DescriptionAttribute类 using System.ComponentModel; public enum Gender { [Description("男性")] Male, [Description("…

    C# 2023年6月6日
    00
  • .NET的动态编译与WS服务调用详解

    以下是“.NET的动态编译与WS服务调用详解”的完整攻略,包括什么是动态编译、如何使用C#实现动态编译、如何使用WS服务调用以及两个示例。 什么是动态编译? 动态编译是指在程序运行时动态地将代码编译成可执行代码的过程。在.NET中,我们可以使用System.CodeDom.Compiler命名空间中的类来实现动态编译。动态编译可以用于实现插件式架构、动态生成…

    C# 2023年5月15日
    00
  • C# Math.Min()方法: 返回两个数中较小的那个数

    Math.Min()是C#中的一个数学函数,用于返回两个值中较小的一个值。以下是该函数的具体作用和使用方法: Math.Min()的作用 Math.Min()的作用是返回给定的两个参数中的最小值。Math.Min()函数可用于以下场景: 在比较两个数值大小的时候快速找到最小值。 在编写条件语句时,根据值的大小决定程序的执行路径。 Math.Min()的使用方…

    C# 2023年4月19日
    00
  • C#委托delegate实例解析

    C#委托(delegate)实例解析 什么是委托 在C#中,委托是一种类型,它允许将方法作为参数传递给其他方法,类似于C++中的函数指针。 委托可以理解为一种类似于函数指针的东西,它通过引用方法来实现方法调用。委托包含一个方法的引用,通过它可以调用委托实例引用的方法。 委托的使用场景 多播委托:将多个方法绑定到同一个委托上,并调用这个委托就可以同时调用绑定的…

    C# 2023年6月8日
    00
  • 如何使用C# Stopwatch 测量微秒级精确度

    使用C# Stopwatch测量微秒级精确度的完整攻略如下: 步骤 1:导入命名空间 首先,在代码文件的顶部,添加System.Diagnostics 命名空间,以便使用 Stopwatch 类: using System.Diagnostics; 步骤 2:初始化 Stopwatch 创建 Stopwatch 类示例,并调用 Start 方法(或 Rest…

    C# 2023年5月15日
    00
  • C# DirectoryInfo.GetFiles – 获取目录下的所有文件信息

    DirectoryInfo.GetFiles() 方法是C#文件操作中用于获取目录中所有文件的方法之一。该方法可以返回当前 DirectoryInfo 的所有文件(包括子目录中的文件),并且可以使用模式进行过滤。 DirectoryInfo.GetFiles() 方法返回一个 FileInfo 数组,其中每个文件都表示找到的文件。可以使用 FileInfo …

    C# 2023年4月19日
    00
  • webpack-dev-server核心概念案例详解

    webpack-dev-server核心概念案例详解 webpack-dev-server是一个基于Node.js的开发服务器,它可以实时重新加载页面,提高开发效率。本文将详细讲解webpack-dev-server的核心概念,并提供两个示例。 1. 安装webpack-dev-server 在使用webpack-dev-server之前,需要先安装它。可以…

    C# 2023年5月15日
    00
  • C#自定义异常就这么简单

    C#是一种强类型语言,可以捕获和处理各种异常,从而帮助我们发现程序中出现的错误。在程序开发过程中,如果需要找到特定的错误情况并处理,这时就需要创建自定义异常。本文将介绍如何在C#中创建和使用自定义异常。 1、什么是异常? 异常是指在程序执行期间发生的错误或异常情况,例如除法中除以0、文件不存在、内存不足等。当发生异常时,程序会停止执行当前的操作,并抛出一个异…

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