C# 集合:初学者指南

你好,未来的程序员们!今天,我们将踏上一段激动人心的旅程,探索C#集合的世界。如果你是编程新手,不用担心——我会作为你友好的向导,一步步解释所有内容。让我们跳进去吧!

C# - Collections

集合是什么?

想象你在组织一个聚会,需要跟踪所有来宾。你可以把每个名字写在一张单独的纸上,但这会很乱且效率低下。相反,你可能会使用一个客人名单。在C#中,集合就像那个客人名单——它们帮助我们组织和管理工作相关的对象组。

为什么使用集合?

集合超级有用,因为它们允许我们:

  1. 在单个变量中存储多个项目
  2. 容易添加或移除项目
  3. 搜索和排序数据
  4. 对数据组执行操作

现在,让我们看看C#中一些最常见类型的集合。

列表:你的灵活朋友

什么是列表?

列表就像一个动态数组,可以根据需要增长或缩小。当你不知道确切需要存储多少项目时,它非常完美。

如何使用列表

让我们创建一个我们喜欢的水果列表:

List<string> fruits = new List<string>();
fruits.Add("苹果");
fruits.Add("香蕉");
fruits.Add("樱桃");

Console.WriteLine($"我们有 {fruits.Count} 个水果。");
Console.WriteLine($"第二个水果是 {fruits[1]}。");

在这个例子中,我们:

  1. 创建了一个新的字符串列表
  2. 向我们的列表中添加了三种水果
  3. 打印了水果的数量(使用Count属性)
  4. 使用索引(记住,索引从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("我们不知道樱桃的颜色。");
}

在这里,我们:

  1. 创建了一个带有字符串键和字符串值的字典
  2. 添加了三组水果-颜色对
  3. 使用水果键访问颜色
  4. 在尝试访问其值之前,检查键是否存在

输出:

一个苹果是 红色。
我们不知道樱桃的颜色。

队列:先到先得

什么是队列?

队列就像杂货店里的队伍——队列中第一个人是第一个被服务的人。在编程术语中,它是一个“先进先出”(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}");

在这个例子中,我们:

  1. 创建了一个字符串队列
  2. 向队列中添加(Enqueue)了三个项目
  3. 移除(Dequeue)了第一个项目
  4. 查看下一个项目,但不移除它

输出:

队列中的项目: 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}");

在这里,我们:

  1. 创建了一个字符串栈
  2. 向栈中推入三个操作
  3. 查看顶部项目
  4. 弹出(移除并返回)顶部项目

输出:

撤销操作: 3
最后一个操作: 删除 'World'
撤销: 删除 'World'
剩余操作: 2

集合方法表

以下是这些集合的常见方法表格:

方法 列表 字典 队列
Add - -
Remove - -
Clear
Contains ✓ (ContainsKey)
Count
Enqueue - - -
Dequeue - - -
Push - - -
Pop - - -
Peek - -

结束语

恭喜你!你已经迈出了进入C#集合世界的第一步。记住,每种集合类型都有其优势,选择正确的集合可以使你的代码更高效、更易读。

在你继续编程之旅时,你会发现使用这些集合的更多方法。不要害怕尝试——这是我们所有人学习和成长为开发者的方式。

快乐编码,愿你的集合总是井井有条!

Credits: Image by storyset