创建优先级队列

时间:2017-05-31 00:14:40

标签: c# list queue hierarchy

我需要创建一个优先级队列,但我有点迷失了怎么办。 我有这两个清单。

        //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)];
    }

我需要一个优先级队列,因为洋红色是优先级,然后是红色,然后是黄色,并且是绿色。如何将一些患者分配给我的医生尊重这种颜色层次?

3 个答案:

答案 0 :(得分:2)

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

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


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

答案 1 :(得分:1)

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

例如:

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

使用此逻辑,您无需更改代码。

答案 2 :(得分:0)

关于优先级队列的主要问题是它应该跟踪在各种优先级中添加的内容并使它们保持有序。要做到这一点,你真的需要一个正确构造的数据结构,或者你最终会通过调用对内置的.NET结构进行反复排序,这在语法和性能方面都很糟糕。

优先级队列的优先级优先级实现应该可以满足您的需要:PriorityQueue source

如果您需要该功能,并发版本位于: ConcurrentPriorityQueue source

int-ordered优先级队列可以正常使用枚举,因为枚举是整数类型,添加了一些语法糖。 :)希望这有帮助!