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 动态有序集合 筛选、查询、排序 灵活,查找慢

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

相关推荐
qq_452396235 分钟前
第二篇:《Go 开发环境搭建:SDK、IDE、Module 与 Hello World》
开发语言·ide·golang
EIP低代码平台26 分钟前
EIP低代码平台系统-字典功能讲解
低代码·c#·工作流
天青色等烟雨..33 分钟前
全流程ArcGISPro空间分析、三维建模、可视化及Python融合应用技术
开发语言·python
丰锋ff40 分钟前
1.2 Qt常用基础类型
开发语言·qt
冰暮流星1 小时前
javascript之String方法介绍
开发语言·javascript·ecmascript
吉普赛的歌2 小时前
YARP负载均衡配置了多个相同接口导致的报错
c#·yarp
nianniannnn2 小时前
Qt QMessageBox知识点
开发语言·数据库·qt
故乡de云2 小时前
AWS 添加付款方式失败排查清单:卡片、银行风控与账号状态逐项定位
开发语言·php
J_yyy2 小时前
【Qt核心组件类框架】
开发语言·qt
星恒随风2 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习