C#中list的用法实例
《C#中List的用法实例》
在C#编程中,List
一、List的基础操作
1.1 创建List实例
使用泛型语法创建List时需指定元素类型,以下是三种常见初始化方式:
// 方式1:空列表初始化
List names1 = new List();
// 方式2:指定初始容量(提高性能)
List numbers = new List(10);
// 方式3:使用集合初始化器
List prices = new List { 19.99, 29.99, 39.99 };
1.2 添加元素
Add方法向列表末尾添加单个元素,AddRange可批量添加集合:
List fruits = new List();
fruits.Add("Apple");
fruits.AddRange(new[] { "Banana", "Orange" });
// 输出结果:Apple, Banana, Orange
Console.WriteLine(string.Join(", ", fruits));
1.3 访问元素
通过索引器访问元素时需注意边界检查,Insert方法可在指定位置插入元素:
List letters = new List { 'A', 'B', 'D' };
letters.Insert(2, 'C'); // 在索引2处插入
// 输出:A B C D
for (int i = 0; i
二、搜索与修改操作
2.1 查找元素
Contains方法检查元素是否存在,IndexOf返回首次出现的位置:
List scores = new List { 85, 90, 75, 90 };
bool has90 = scores.Contains(90); // true
int first90Index = scores.IndexOf(90); // 1
// 使用Exists进行复杂条件查找
bool hasHighScore = scores.Exists(s => s > 85);
2.2 修改元素
通过索引直接修改,或使用ConvertAll进行整体转换:
List codes = new List { "A01", "B02", "C03" };
codes[1] = "B99"; // 修改索引1的元素
// 将所有元素转为大写
List upperCodes = codes.ConvertAll(c => c.ToUpper());
2.3 删除元素
提供多种删除方式,需注意性能差异:
List ids = new List { 101, 102, 103, 102 };
// 按值删除(首次出现)
ids.Remove(102);
// 按索引删除
ids.RemoveAt(0);
// 删除所有匹配项
ids.RemoveAll(id => id == 102);
// 清空列表
ids.Clear();
三、排序与比较操作
3.1 基本排序
Sort方法默认按升序排列,Reverse实现逆序:
List ages = new List { 25, 18, 30, 22 };
ages.Sort(); // 18, 22, 25, 30
ages.Reverse(); // 30, 25, 22, 18
3.2 自定义排序
通过Comparison委托或IComparer接口实现复杂排序:
List names = new List { "Tom", "Alice", "Bob" };
// 按字符串长度排序
names.Sort((x, y) => x.Length.CompareTo(y.Length));
// 使用自定义比较器
public class LengthComparer : IComparer
{
public int Compare(string x, string y) => y.Length.CompareTo(x.Length);
}
names.Sort(new LengthComparer()); // 降序排列
四、高级操作实例
4.1 列表转换
使用ToArray和ToList实现集合转换:
string[] nameArray = new[] { "John", "Mary" };
List nameList = nameArray.ToList();
List numList = new List { 1, 2, 3 };
int[] numArray = numList.ToArray();
4.2 范围操作
GetRange获取子列表,AsReadOnly创建只读视图:
List colors = new List { "Red", "Green", "Blue", "Yellow" };
// 获取索引1-2的元素
List subColors = colors.GetRange(1, 2);
// 创建只读列表
IList readOnly = colors.AsReadOnly();
4.3 查找极值
结合LINQ查询最大最小值:
List temperatures = new List { 23.5, 25.1, 22.8, 24.3 };
double maxTemp = temperatures.Max();
double minTemp = temperatures.Min();
double avgTemp = temperatures.Average();
五、性能优化技巧
5.1 容量管理
预先设置Capacity避免多次扩容:
List buffer = new List(1024); // 初始容量1024
for (int i = 0; i
5.2 批量操作
使用AddRange比多次Add更高效:
// 低效方式
List slowList = new List();
for (int i = 0; i fastList = new List(1000);
string[] temp = new string[1000];
for (int i = 0; i
5.3 结构体列表优化
对于值类型集合,考虑使用结构体减少堆分配:
public struct Point { public int X; public int Y; }
List points = new List(1000);
for (int i = 0; i
六、实际应用案例
6.1 用户数据管理
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
List users = new List
{
new User { Id = 1, Name = "Alice" },
new User { Id = 2, Name = "Bob" }
};
// 添加新用户
users.Add(new User { Id = 3, Name = "Charlie" });
// 按ID查找用户
User found = users.FirstOrDefault(u => u.Id == 2);
// 删除ID为1的用户
users.RemoveAll(u => u.Id == 1);
6.2 成绩统计系统
List grades = new List { 88.5, 92.0, 76.5, 85.0 };
// 计算平均分
double average = grades.Average();
// 统计及格率
int passCount = grades.Count(g => g >= 60);
double passRate = (double)passCount / grades.Count * 100;
// 成绩分级
var gradeStats = grades.GroupBy(g =>
g >= 90 ? "A" :
g >= 80 ? "B" :
g >= 70 ? "C" :
g >= 60 ? "D" : "F")
.ToDictionary(g => g.Key, g => g.Count());
七、常见问题解决方案
7.1 线程安全问题
多线程环境下需使用同步机制:
List sharedList = new List();
object lockObj = new object();
// 线程安全添加
lock (lockObj)
{
sharedList.Add(1);
}
// 或使用并发集合
ConcurrentBag concurrentBag = new ConcurrentBag();
concurrentBag.Add(1);
7.2 内存管理
处理大数据量时注意及时释放资源:
// 大数据处理示例
List largeData = new List(10000);
try
{
// 填充数据...
}
finally
{
// 显式清空引用
largeData.Clear();
// 提示GC回收
GC.Collect();
}
7.3 性能对比
不同操作的时间复杂度:
// 索引访问:O(1)
int item = list[0];
// 线性搜索:O(n)
bool exists = list.Contains(item);
// 排序:O(n log n)
list.Sort();
// 添加到末尾:平均O(1),最坏O(n)
关键词:C#、List
简介:本文系统讲解C#中List