C# 泛型集合类List使用总结
目录
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