C# 泛型集合类List使用总结

C# 泛型集合类List使用总结

目录

  1. 介绍
  2. 创建List
  3. 添加元素
  4. 删除元素
  5. 查询元素
  6. 遍历List
  7. List的排序
  8. 示例1:统计字符串中单词出现次数
  9. 示例2:实现学生信息管理系统

1. 介绍

C#中的List是一个泛型集合类,可以储存任意类型的数据,它类似于C++ STL中的vector。List的数据结构是动态数组,支持快速访问和线性遍历。与Array相比,List的长度是可以动态调整的,使用更加灵活。

2. 创建List

List的创建需要指定类型,例如:

List<int> intList = new List<int>();
List<string> strList = new List<string>();

上述代码创建了两个空List,一个储存int类型的元素,一个储存string类型的元素。如果需要在创建时添加元素,可以使用集合初始化器:

List<int> intList = new List<int>{1,2,3};
List<string> strList = new List<string>{"hello","world"};

3. 添加元素

List的元素可以使用Add方法添加到末尾,也可以使用Insert方法插入到指定的位置:

List<int> intList = new List<int>();
intList.Add(1);
intList.Add(2);
intList.Insert(1,3); // 将3插入到索引为1的位置

4. 删除元素

List的元素可以使用Remove方法删除,也可以使用RemoveAt方法删除指定位置的元素:

List<int> intList = new List<int>{1,2,3};
intList.Remove(2);    // 删除值为2的元素
intList.RemoveAt(0);  // 删除索引为0的元素

5. 查询元素

List的元素可以使用索引访问,也可以使用Contains方法判断是否包含指定元素:

List<int> intList = new List<int>{1,2,3};
Console.WriteLine(intList[0]);
Console.WriteLine(intList.Contains(2)); // true

6. 遍历List

List的元素可以使用foreach遍历,也可以使用for循环访问:

List<int> intList = new List<int>{1,2,3};
foreach(int i in intList){
    Console.WriteLine(i);
}
for(int i=0; i<intList.Count; i++){
    Console.WriteLine(intList[i]);
}

7. List的排序

List的元素可以使用Sort方法排序,默认是按照元素值的大小升序排序:

List<int> intList = new List<int>{3,1,2};
intList.Sort(); // 升序排序
foreach(int i in intList){
    Console.WriteLine(i);
}

也可以使用自定义比较器定义排序规则,以降序排序为例:

List<int> intList = new List<int>{3,1,2};
intList.Sort((x,y) => y.CompareTo(x)); // 降序排序
foreach(int i in intList){
    Console.WriteLine(i);
}

8. 示例1:统计字符串中单词出现次数

需求:给定一段英文句子,统计其中每个单词的出现次数。

代码示例:

string sentence = "The quick brown fox jumps over the lazy dog";
string[] words = sentence.Split(' ');

List<string> wordList = new List<string>();
foreach(string word in words){
    if(wordList.Contains(word)){
        continue;
    }else{
        wordList.Add(word);
    }
}

foreach(string s in wordList){
    Console.WriteLine(s + ": " + words.Count(w => w==s));
}

运行结果:

The: 1
quick: 1
brown: 1
fox: 1
jumps: 1
over: 1
the: 1
lazy: 1
dog: 1

9. 示例2:实现学生信息管理系统

需求:实现一个简单的学生信息管理系统,包含添加、删除、查询、修改等功能。

代码示例:

class Program
{
    static List<Student> studentList = new List<Student>();

    static void Main(string[] args)
    {
        while(true){
            Console.WriteLine("1. 添加学生信息");
            Console.WriteLine("2. 删除学生信息");
            Console.WriteLine("3. 查询学生信息");
            Console.WriteLine("4. 修改学生信息");
            Console.Write("请选择:");
            string choice = Console.ReadLine();
            switch(choice){
                case "1":
                    AddStudent();
                    break;
                case "2":
                    DeleteStudent();
                    break;
                case "3":
                    QueryStudent();
                    break;
                case "4":
                    ModifyStudent();
                    break;
                default:
                    Console.WriteLine("无效的选择");
                    break;
            }
        }
    }

    static void AddStudent(){
        Console.Write("请输入学生姓名:");
        string name = Console.ReadLine();
        Console.Write("请输入学生年龄:");
        int age = int.Parse(Console.ReadLine());
        Console.Write("请输入学生性别(M/F):");
        string genderStr = Console.ReadLine();
        Gender gender = genderStr=="F"?Gender.Female:Gender.Male;
        Student newStudent = new Student(name,age,gender);
        studentList.Add(newStudent);
        Console.WriteLine("学生添加成功。");
    }

    static void DeleteStudent(){
        Console.Write("请输入学生姓名:");
        string name = Console.ReadLine();
        Student studentToDelete = studentList.Find(s => s.Name==name);
        if(studentToDelete==null){
            Console.WriteLine("未找到该学生。");
        }else{
            studentList.Remove(studentToDelete);
            Console.WriteLine("学生删除成功。");
        }
    }

    static void QueryStudent(){
        Console.Write("请输入学生姓名:");
        string name = Console.ReadLine();
        List<Student> results = studentList.FindAll(s => s.Name==name);
        if(results.Count==0){
            Console.WriteLine("未找到该学生。");
        }else{
            foreach(Student s in results){
                Console.WriteLine(s.ToString());
            }
        }
    }

    static void ModifyStudent(){
        Console.Write("请输入学生姓名:");
        string name = Console.ReadLine();
        Student studentToModify = studentList.Find(s => s.Name==name);
        if(studentToModify==null){
            Console.WriteLine("未找到该学生。");
        }else{
            Console.Write("请输入学生新年龄:");
            int newAge = int.Parse(Console.ReadLine());
            Console.Write("请输入学生新性别(M/F):");
            string genderStr = Console.ReadLine();
            Gender newGender = genderStr=="F"?Gender.Female:Gender.Male;
            studentToModify.Age = newAge;
            studentToModify.Gender = newGender;
            Console.WriteLine("学生信息修改成功。");
        }
    }
}

class Student{
    public string Name {get;set;}
    public int Age {get;set;}
    public Gender Gender {get;set;}

    public Student(string name, int age, Gender gender){
        Name = name;
        Age = age;
        Gender = gender;
    }

    public override string ToString(){
        return $"姓名:{Name} 年龄:{Age} 性别:{Gender}";
    }
}

enum Gender{
    Male,
    Female
}

运行结果:

1. 添加学生信息
2. 删除学生信息
3. 查询学生信息
4. 修改学生信息
请选择:1
请输入学生姓名:张三
请输入学生年龄:20
请输入学生性别(M/F):M
学生添加成功。
1. 添加学生信息
2. 删除学生信息
3. 查询学生信息
4. 修改学生信息
请选择:3
请输入学生姓名:张三
姓名:张三 年龄:20 性别:Male
1. 添加学生信息
2. 删除学生信息
3. 查询学生信息
4. 修改学生信息
请选择:4
请输入学生姓名:张三
请输入学生新年龄:21
请输入学生新性别(M/F):M
学生信息修改成功。
1. 添加学生信息
2. 删除学生信息
3. 查询学生信息
4. 修改学生信息
请选择:3
请输入学生姓名:张三
姓名:张三 年龄:21 性别:Male
1. 添加学生信息
2. 删除学生信息
3. 查询学生信息
4. 修改学生信息
请选择:2
请输入学生姓名:张三
学生删除成功。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 泛型集合类List使用总结 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 为何Linq的Distinct实在是不给力

    首先,我们需要了解什么是 Linq 中的 Distinct 方法。该方法用于从序列中提取不同的元素,即去除重复项。但是,我们在使用 Distinct 方法时需要注意以下几点: 1. Distinct 方法需要实现 IEquatable 接口 默认情况下,Distinct 方法会使用对象的 Equals 方法来判断两个对象是否相同。如果使用的对象没有实现 IE…

    C# 2023年6月1日
    00
  • C#字符串内存驻留机制分析

    C#字符串内存驻留机制分析 什么是字符串内存驻留机制 C#中使用字符串常量池进行内存共享,其中长度相同且内容相同的字符串只会在内存中存在一份拷贝。当程序中声明了一个字符串常量时,如果该字符串内容已经存在于池中,那么常量会直接指向内存池中的共享内存区域。这个机制就是字符串内存驻留机制。其可以减少内存使用,提高程序运行效率。 字符串内存驻留机制的实现方式 小字符…

    C# 2023年5月31日
    00
  • unity scrollRect实现按页码翻页效果

    下面是Unity中ScrollRect实现按页码翻页效果的攻略: 1. 需求分析 首先,我们需要明确我们的需求:利用ScrollRect制作一个翻页效果,实现按页码进行翻页操作。这意味着我们需要按照固定的大小拆分显示内容,每个页面的大小应该相同,并且在翻页时应该有一个平滑的过渡动画。 2. 设置ScrollRect参数 首先,我们需要在Unity中创建一个S…

    C# 2023年6月3日
    00
  • asp.net SqlDataAdapter对象使用札记

    请允许我为你详细讲解一下“asp.net SqlDataAdapter对象使用札记”的完整攻略。 什么是 SqlDataAdapter 对象 SqlDataAdapter 是 .NET Framework 中 SqlClient 命名空间提供的一个类,它是一种用于工作与 SQL Server 数据库的 .Net 数据提供程序。SqlDataAdapter 可…

    C# 2023年6月3日
    00
  • C# NetRemoting实现双向通信

    C#NetRemoting是一种在不同应用程序域之间进行远程过程调用(RPC)的技术,可以实现客户端与服务器之间的双向通信。下面是C#NetRemoting实现双向通信的完整攻略: 步骤一:创建接口 第一步是创建一个接口,定义双向通信的方法和事件,例如: public interface IRemoteObject { // 定义客户端向服务器发送消息的方法…

    C# 2023年5月14日
    00
  • C#实现给定字符串生成MD5哈希的方法

    下面是“C#实现给定字符串生成MD5哈希的方法”的完整攻略: 步骤一:导入命名空间 首先需要在代码中导入System.Security.Cryptography命名空间,它包含了实现MD5算法的相关类。 using System.Security.Cryptography; 步骤二:编写方法 接下来,需要编写一个方法来生成给定字符串的MD5哈希值。具体的代码…

    C# 2023年6月7日
    00
  • 【代码设计】C# 实现 AOP 面向切面编程

        简单记录一下对AOP的认识,正文为3个部分     一、AOP由来     二、用DispatchProxy动态代理实现AOP     三、通过特性标记,处理多种不同执行前、执行后的逻辑编排   一、AOP 由来 IUserHelper userHelper = new CommonUserHelper(); // commonUser.Create…

    C# 2023年4月18日
    00
  • ASP.Net Core中的内存和GC机制

    ASP.NET Core中的内存和GC机制 在本攻略中,我们将深入了解ASP.NET Core中的内存和GC机制。我们将介绍.NET Core内存管理的基本原理、GC机制的工作原理和使用方法,并提供两个示例说明。 .NET Core内存管理的基本原理 .NET Core内存管理的基本原理是将内存分为两个部分:托管堆和非托管堆。托管堆是由.NET运行时管理的内…

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