C# 创建优先级队列

C# 创建优先级队列,c#,list,queue,hierarchy,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

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

        //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"));

我用这个代码给我的病人分配随机颜色

    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);

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

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);

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

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

例如:

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

使用这种逻辑,您不需要更改代码。

优先级队列的主要特点是,它应该跟踪在不同优先级添加的内容,并保持它们的顺序。要做到这一点,您确实需要一个正确构造的数据结构,否则您会反复调用来对内置的.NET结构进行排序,这在语法上和性能上都很糟糕

这里有一个优先级队列的int-priority实现,可以很好地满足您的需要:

如果您需要该功能,可在此处找到并发版本:


整数排序优先级队列适用于枚举,因为枚举是整数类型,并添加了一些语法糖。:)希望这有帮助

优先级队列的主要特点是,它应该跟踪在不同优先级添加的内容,并使它们保持有序。要做到这一点,您确实需要一个正确构造的数据结构,否则您会反复调用来对内置的.NET结构进行排序,这在语法上和性能上都很糟糕

这里有一个优先级队列的int-priority实现,可以很好地满足您的需要:

如果您需要该功能,可在此处找到并发版本:


整数排序优先级队列适用于枚举,因为枚举是整数类型,并添加了一些语法糖。:)希望这有帮助

谢谢你的意见。我要试试这个,没用,知道为什么吗?我是将其放在main()中还是需要创建一个新类。@Dany4k您创建一个枚举。他发布了代码来做这件事。谢谢你的输入。我要试试这个,没用,知道为什么吗?我是将其放在main()中还是需要创建一个新类。@Dany4k您创建一个枚举。他发布了代码来做这件事。我刚做了这件事,我得到了一个错误的颜色。“不包含颜色的定义,也不包含扩展方法颜色。@Dany4k颜色就是一个例子。您需要将
sick.Color
更改为
sick.TheNameofProperty,该属性在对象属性上保留ColorValue
”sick“是Utene对象的一个实例。在您的示例中,您没有为Utente类定义提供代码,因此我的示例中的“Color”只是一个占位符属性。您需要将其更改为保存对象“Utene”中颜色的属性。我刚刚这样做了,我得到了一个关于颜色的错误。“不包含颜色的定义,也不包含扩展方法颜色。@Dany4k颜色就是一个例子。您需要将
sick.Color
更改为
sick.TheNameofProperty,该属性在对象属性上保留ColorValue
”sick“是Utene对象的一个实例。在您的示例中,您没有为Utente类定义提供代码,因此我的示例中的“Color”只是一个占位符属性。您需要将其更改为保存对象“Utene”中颜色的属性。