C# 高级集合使用示例

本文以图书管理系统为例,分模块讲解 C# 常用集合,包含概念讲解和示例代码。


1️⃣ Dictionary + List:按分类管理图书

概念讲解

  • Dictionary<TKey, TValue> 是基于哈希表实现的键值对集合。

  • 特点

    • 通过键可以快速查找元素(时间复杂度 O(1))。
    • 键必须唯一,但值可以重复。
  • 适用场景

    • 需要根据某个唯一标识(键)快速访问数据。
    • 组织分类数据,例如按类别管理图书。
  • 优缺点

    • 优点:查找快、插入和删除效率高。
    • 缺点:不保证元素顺序,存储开销相对较大。

示例代码

csharp 复制代码
using System;
using System.Collections.Generic;

class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Category { get; set; }
    public int Stock { get; set; }

    public override string ToString()
    {
        return $"[{Id}] {Title} ({Category}) - 库存: {Stock}";
    }
}

class Program
{
    static void Main()
    {
        var books = new List<Book>
        {
            new Book{Id=1, Title="C# 基础教程", Category="编程", Stock=5},
            new Book{Id=2, Title="算法导论", Category="计算机", Stock=3},
            new Book{Id=3, Title="数据结构", Category="计算机", Stock=2},
            new Book{Id=4, Title="设计模式", Category="编程", Stock=4},
            new Book{Id=5, Title="文学名著", Category="文学", Stock=6}
        };

        Dictionary<string, List<Book>> library = new Dictionary<string, List<Book>>();

        foreach (var book in books)
        {
            if (!library.ContainsKey(book.Category))
                library[book.Category] = new List<Book>();
            library[book.Category].Add(book);
        }

        Console.WriteLine("===== 图书按分类显示 =====");
        foreach (var category in library.Keys)
        {
            Console.WriteLine($"类别: {category}");
            foreach (var book in library[category])
                Console.WriteLine($"  {book}");
        }
    }
}

2️⃣ Stack:最新借阅记录(LIFO)

概念讲解

  • Stack 是后进先出(LIFO)的集合。

  • 特点

    • Push 入栈,Pop 出栈。
    • 最新添加的元素最先被访问。
  • 适用场景

    • 保存操作历史(撤销功能)。
    • 最近借阅记录。
  • 优缺点

    • 优点:操作简单,访问最新元素效率高。
    • 缺点:无法随机访问中间元素。

示例代码

csharp 复制代码
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack<string> borrowHistory = new Stack<string>();

        borrowHistory.Push("C# 基础教程");
        borrowHistory.Push("算法导论");
        borrowHistory.Push("设计模式");

        Console.WriteLine("===== 最新借阅记录 =====");
        foreach (var title in borrowHistory)
            Console.WriteLine(title);

        Console.WriteLine($"\n弹出最新借阅: {borrowHistory.Pop()}");
    }
}

3️⃣ Queue:借书排队(FIFO)

概念讲解

  • Queue 是先进先出(FIFO)的集合。

  • 特点

    • Enqueue 入队,Dequeue 出队。
    • 最早添加的元素最先被访问。
  • 适用场景

    • 排队处理请求。
    • 消息队列、任务调度。
  • 优缺点

    • 优点:保证顺序,操作高效。
    • 缺点:无法随机访问中间元素。

示例代码

csharp 复制代码
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<string> borrowQueue = new Queue<string>();
        borrowQueue.Enqueue("数据结构");
        borrowQueue.Enqueue("文学名著");

        Console.WriteLine("===== 借书队列 =====");
        while (borrowQueue.Count > 0)
        {
            var book = borrowQueue.Dequeue();
            Console.WriteLine($"借出: {book}");
        }
    }
}

4️⃣ SortedList:统计最畅销图书

概念讲解

  • SortedList<TKey, TValue> 是按键排序的键值对集合。

  • 特点

    • 自动按键排序。
    • 支持通过键或索引访问。
  • 适用场景

    • 排名系统。
    • 统计按某个数值排序的数据。
  • 优缺点

    • 优点:键有序,查找效率高。
    • 缺点:插入和删除操作较慢,键必须唯一。

示例代码

csharp 复制代码
using System;
using System.Collections;

class Program
{
    static void Main()
    {
        SortedList popularBooks = new SortedList();
        popularBooks.Add(10, "C# 基础教程");
        popularBooks.Add(15, "算法导论");
        popularBooks.Add(8, "设计模式");

        Console.WriteLine("===== 最畅销图书 =====");
        foreach (DictionaryEntry entry in popularBooks)
            Console.WriteLine($"{entry.Value} - 借出次数: {entry.Key}");
    }
}

5️⃣ List + LINQ:库存查询与筛选

概念讲解

  • List 是可动态扩展的有序集合。

  • 特点

    • 支持索引访问。
    • 可以使用 LINQ 快速筛选、排序、聚合。
  • 适用场景

    • 动态存储数据。
    • 复杂条件筛选。
  • 优缺点

    • 优点:操作灵活,功能丰富。
    • 缺点:查找特定元素效率低于字典。

示例代码

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;

class Book
{
    public string Title { get; set; }
    public int Stock { get; set; }
}

class Program
{
    static void Main()
    {
        var books = new List<Book>
        {
            new Book{Title="C# 基础教程", Stock=5},
            new Book{Title="算法导论", Stock=3},
            new Book{Title="数据结构", Stock=2},
            new Book{Title="设计模式", Stock=1},
        };

        var lowStockBooks = books.Where(b => b.Stock <= 2).ToList();

        Console.WriteLine("===== 库存不足的图书 =====");
        foreach (var book in lowStockBooks)
            Console.WriteLine($"{book.Title} - 库存: {book.Stock}");
    }
}

🔹 汇总总结

集合类型 特性 使用场景 优缺点
Dictionary<TKey, TValue> 哈希表,快速查找 分类管理图书 快查找,顺序不保证
Stack 后进先出 最新借阅记录 简单高效,无法随机访问
Queue 先进先出 排队借书 保证顺序,无法随机访问
SortedList<TKey, TValue> 按键排序 排名、统计 键有序,插入慢
List + LINQ 动态有序集合 筛选、查询、排序 灵活,查找慢

通过概念 + 示例 + 使用说明的方式,你可以清楚理解每种集合的特性、适用场景和实际用法,并能结合业务逻辑灵活选择集合类型。

相关推荐
sycmancia2 小时前
C++——动态内存分配、关于虚函数、关于继承中的强制类型转换
开发语言·c++
Mao_Hui2 小时前
Unity3d实时读取Modbus RTU数据
开发语言·嵌入式硬件·unity·c#
echome8882 小时前
Python 装饰器详解:从入门到精通的实用指南
开发语言·python
重生之后端学习2 小时前
62. 不同路径
开发语言·数据结构·算法·leetcode·职场和发展·深度优先
栗子~~2 小时前
hardhat 单元测试时如何观察gas消耗情况
开发语言·单元测试·区块链·智能合约
The hopes of the whole village2 小时前
Matlab FFT分析
开发语言·matlab
兰文彬2 小时前
n8n 2.x版本没有内嵌Python环境
开发语言·python
yiyaozjk2 小时前
Go基础之环境搭建
开发语言·后端·golang
谁动了我的代码?2 小时前
VNC中使用QT的GDB调试,触发断点时与界面窗口交互导致整个VNC冻结
开发语言·qt·svn