创建优先级队列

Creating a Priority queue

我需要创建一个优先队列,但我有点不知道该怎么做。 我有这两个列表。

        //Medic List
        ListaMedico.Add(new Medico(01, "Antonio", 555444333, "antonio@gmail.com", "Dermatologista"));
        ListaMedico.Add(new Medico(02, "Lucas", 555444333, "lucas78@gmail.com", "Cardiologista"));
        ListaMedico.Add(new Medico(03, "Duarte", 555444333, "Duarte90@gmail.com", "Otorrino"));
        ListaMedico.Add(new Medico(04, "Marcos", 555444333, "marcos123@gmail.com", "Clinica Geral"));
        ListaMedico.Add(new Medico(05, "Pedro", 555444333, "Pedro12@gmail.com", "Pediatra"));

           //Sick People List
            ListaUtente.Add(new Utente(100001, "Pedro", 914754123, "pedro@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100002, "Lucas", 974123214, "lucas91@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100003, "Rodrigo", 941201456, "rodrigo00@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100004, "Gaspar", 987453210, "gaspar@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100005, "Roberto", 974120219, "roberto@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100006, "Eduardo", 974120219, "edu@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100007, "Ismael", 974120219, "Isma@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100008, "Paulo", 974120219, "Paulo90@gmail.com", GetRandomColor()));
            ListaUtente.Add(new Utente(100009, "Ana", 974120219, "ana.90@gmail.com", GetRandomColor()));

我使用此代码为我的患者分配随机颜色。

    static ConsoleColor[] colors = { ConsoleColor.Red, ConsoleColor.Green, ConsoleColor.Yellow, ConsoleColor.Magenta }; // Cores disponíveis para usar nas Senhas
    static ConsoleColor GetRandomColor()
    {

        return colors[random.Next(colors.Length)];
    }

我需要一个优先队列,因为洋红色优先,然后是红色,然后是黄色,最后是绿色。我如何根据这种颜色层次结构将一些患者分配给我的医生?

您可以根据您的优先级相应地定义枚举项的值,并检索按它排序的列表项。

public enum ConsoleColor { Magenta = 1, Red =2, Yellow = 3, Green = 4 }


ListaUtente.OrderBy(x => (int)x);

您可以使用自定义排序依据来执行此操作,但您必须指定如何按优先级排序

例如:

var orderedByPriority = ListaUtente.OrderBy(sick => 
    sick.Color == ConsoleColor.Magenta ? 1 :
    sick.Color == ConsoleColor.Red ? 2 :
    sick.Color == ConsoleColor.Yellow ? 3 : 4);

有了这个逻辑,您就不需要更改代码了。

关于优先级队列的主要事情是它应该跟踪以各种优先级添加的内容并使它们保持有序。要做到这一点,您确实需要一个正确构造的数据结构,否则您将最终通过调用对内置 .NET 结构进行排序来模拟它,这在语法上和性能上都是不好的。

这里有一个优先级队列的 int-priority 实现,应该可以很好地满足您的目的:PriorityQueue source

并发版本,如果你需要那个功能,在这里: ConcurrentPriorityQueue source

整数排序的优先级队列可以很好地处理枚举,因为枚举是添加了一些语法糖的整数类型。 :) 希望这对您有所帮助!