namespace PriorityQueueDemo { public class Task { public string Name { get; set; } } public class TaskPriorityComparer : IComparer<(int, int)> { public int Compare((int, int) x, (int, int) y) { // 首先比较紧急程度,然后比较重要性 int compareUrgency = x.Item1.CompareTo(y.Item1); if (compareUrgency != 0) return compareUrgency; return x.Item2.CompareTo(y.Item2); } } internal class Program { static void Main(string[] args) { // 优先队列是一种特殊的队列,其中每个元素都有一个优先级。元素按照优先级的顺序被移除,而不是它们被添加到队列中的顺序。这意味着高优先级的元素将会在低优先级的元素之前被处理 // 值越小等级越高 // 简单的优先队列 var priorityQueue1 = new PriorityQueue<string, int>(); // 向队列中添加元素和对应的优先级 priorityQueue1.Enqueue("任务高", 1); priorityQueue1.Enqueue("任务低", 3); priorityQueue1.Enqueue("任务中", 2); // 按优先级顺序移除和返回元素 while (priorityQueue1.TryDequeue(out var item, out var priority)) { Console.WriteLine($"处理 {item} 优先级 {priority}"); } // 自定义优先级规则 var priorityQueue2 = new PriorityQueue<Task, (int, int)>(new TaskPriorityComparer()); // 添加任务 priorityQueue2.Enqueue(new Task { Name = "任务A" }, (1, 2)); priorityQueue2.Enqueue(new Task { Name = "任务B" }, (1, 1)); priorityQueue2.Enqueue(new Task { Name = "任务C" }, (2, 3)); // 按优先级顺序处理任务 while (priorityQueue2.TryDequeue(out var task, out var priority)) { var note = $"执行任务 {task.Name} 紧急程度 {priority.Item1} 重要性 {priority.Item2}"; Console.WriteLine(note); Console.WriteLine("是否输入新任务?(Y / N): "); var key = Console.ReadKey(); Console.WriteLine(""); if (key.Key == ConsoleKey.Y) { Console.WriteLine("请输入任务信息(任务X,1,1):"); var taskInfo = Console.ReadLine(); Console.WriteLine(""); if (!string.IsNullOrEmpty(taskInfo)) { var infos = taskInfo.Split(','); var taskName = infos[0]; var urgency = Convert.ToInt32(infos[1]);// 紧急程度 var importance = Convert.ToInt32(infos[2]);// 重要性 priorityQueue2.Enqueue(new Task { Name = taskName }, (urgency, importance)); Console.WriteLine($"插入任务 {taskName} 紧急程度 {urgency} 重要性 {importance}"); } } } } } }