C# 集合:初学者指南
你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索C#集合的世界。如果你是编程新手,不用担心——我会作为你友好的向导,一步步解释所有内容。让我们跳进去吧!
集合是什么?
想象你在组织一个聚会,需要跟踪所有来宾。你可以把每个名字写在一张单独的纸上,但这会很乱且效率低下。相反,你可能会使用一个客人名单。在C#中,集合就像那个客人名单——它们帮助我们组织和管理工作相关的对象组。
为什么使用集合?
集合超级有用,因为它们允许我们:
- 在单个变量中存储多个项目
- 容易添加或移除项目
- 搜索和排序数据
- 对数据组执行操作
现在,让我们看看C#中一些最常见类型的集合。
列表:你的灵活朋友
什么是列表?
列表就像一个动态数组,可以根据需要增长或缩小。当你不知道确切需要存储多少项目时,它非常完美。
如何使用列表
让我们创建一个我们喜欢的水果列表:
List<string> fruits = new List<string>();
fruits.Add("苹果");
fruits.Add("香蕉");
fruits.Add("樱桃");
Console.WriteLine($"我们有 {fruits.Count} 个水果。");
Console.WriteLine($"第二个水果是 {fruits[1]}。");
在这个例子中,我们:
- 创建了一个新的字符串列表
- 向我们的列表中添加了三种水果
- 打印了水果的数量(使用
Count
属性) - 使用索引(记住,索引从0开始!)访问第二个水果
输出:
我们有 3 个水果。
第二个水果是 香蕉。
字典:你的成功之钥
什么是字典?
字典就像现实世界的字典——它存储键值对。每个键必须是唯一的,就像字典中的每个词都有其自己的定义一样。
使用字典
让我们创建一个水果颜色的字典:
Dictionary<string, string> fruitColors = new Dictionary<string, string>();
fruitColors.Add("苹果", "红色");
fruitColors.Add("香蕉", "黄色");
fruitColors.Add("葡萄", "紫色");
Console.WriteLine($"一个苹果是 {fruitColors["苹果"]}。");
if (fruitColors.ContainsKey("樱桃"))
{
Console.WriteLine($"一个樱桃是 {fruitColors["樱桃"]}。");
}
else
{
Console.WriteLine("我们不知道樱桃的颜色。");
}
在这里,我们:
- 创建了一个带有字符串键和字符串值的字典
- 添加了三组水果-颜色对
- 使用水果键访问颜色
- 在尝试访问其值之前,检查键是否存在
输出:
一个苹果是 红色。
我们不知道樱桃的颜色。
队列:先到先得
什么是队列?
队列就像杂货店里的队伍——队列中第一个人是第一个被服务的人。在编程术语中,它是一个“先进先出”(FIFO)数据结构。
队列实战
让我们模拟一个简单的打印队列:
Queue<string> printQueue = new Queue<string>();
printQueue.Enqueue("Report.doc");
printQueue.Enqueue("Picture.jpg");
printQueue.Enqueue("Spreadsheet.xlsx");
Console.WriteLine($"队列中的项目: {printQueue.Count}");
Console.WriteLine($"打印: {printQueue.Dequeue()}");
Console.WriteLine($"下一个: {printQueue.Peek()}");
Console.WriteLine($"剩余项目: {printQueue.Count}");
在这个例子中,我们:
- 创建了一个字符串队列
- 向队列中添加(Enqueue)了三个项目
- 移除(Dequeue)了第一个项目
- 查看下一个项目,但不移除它
输出:
队列中的项目: 3
打印: Report.doc
下一个: Picture.jpg
剩余项目: 2
栈:后进先出
什么是栈?
栈就像一摞盘子——你从顶部添加,从顶部取用。它是一个“后进先出”(LIFO)数据结构。
堆叠起来
让我们使用栈来跟踪文本编辑器中的撤销操作:
Stack<string> undoStack = new Stack<string>();
undoStack.Push("输入 'Hello'");
undoStack.Push("输入 ' World'");
undoStack.Push("删除 'World'");
Console.WriteLine($"撤销操作: {undoStack.Count}");
Console.WriteLine($"最后一个操作: {undoStack.Peek()}");
Console.WriteLine($"撤销: {undoStack.Pop()}");
Console.WriteLine($"剩余操作: {undoStack.Count}");
在这里,我们:
- 创建了一个字符串栈
- 向栈中推入三个操作
- 查看顶部项目
- 弹出(移除并返回)顶部项目
输出:
撤销操作: 3
最后一个操作: 删除 'World'
撤销: 删除 'World'
剩余操作: 2
集合方法表
以下是这些集合的常见方法表格:
方法 | 列表 | 字典 | 队列 | 栈 |
---|---|---|---|---|
Add | ✓ | ✓ | - | - |
Remove | ✓ | ✓ | - | - |
Clear | ✓ | ✓ | ✓ | ✓ |
Contains | ✓ | ✓ (ContainsKey) | ✓ | ✓ |
Count | ✓ | ✓ | ✓ | ✓ |
Enqueue | - | - | ✓ | - |
Dequeue | - | - | ✓ | - |
Push | - | - | - | ✓ |
Pop | - | - | - | ✓ |
Peek | - | - | ✓ | ✓ |
结束语
恭喜你!你已经迈出了进入C#集合世界的第一步。记住,每种集合类型都有其优势,选择正确的集合可以使你的代码更高效、更易读。
在你继续编程之旅时,你会发现使用这些集合的更多方法。不要害怕尝试——这是我们所有人学习和成长为开发者的方式。
快乐编码,愿你的集合总是井井有条!
Credits: Image by storyset