2017-05-31 2 views
0

優先度キューを作成する必要がありますが、それを行う方法が少し失われます。 私はこれら2つのリストを持っています。優先度キューを作成する

 //Medic List 
     ListaMedico.Add(new Medico(01, "Antonio", 555444333, "[email protected]", "Dermatologista")); 
     ListaMedico.Add(new Medico(02, "Lucas", 555444333, "[email protected]", "Cardiologista")); 
     ListaMedico.Add(new Medico(03, "Duarte", 555444333, "[email protected]", "Otorrino")); 
     ListaMedico.Add(new Medico(04, "Marcos", 555444333, "[email protected]", "Clinica Geral")); 
     ListaMedico.Add(new Medico(05, "Pedro", 555444333, "[email protected]", "Pediatra")); 

そして

  //Sick People List 
      ListaUtente.Add(new Utente(100001, "Pedro", 914754123, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100002, "Lucas", 974123214, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100003, "Rodrigo", 941201456, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100004, "Gaspar",, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100005, "Roberto", 974120219, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100006, "Eduardo", 974120219, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100007, "Ismael", 974120219, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100008, "Paulo", 974120219, "[email protected]", GetRandomColor())); 
      ListaUtente.Add(new Utente(100009, "Ana", 974120219, "[email protected]", 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)]; 
    } 

マゼンタは優先順位が高く、次に赤、黄色、および最終的に緑色であるため、優先キューが必要です。どのように私はこの色の階層を尊重して私の医者にいくつかの患者を割り当てることができますか?

答えて

2

あなたの優先度に応じてenum項目の値を定義し、それによって並べ替えるリスト項目を取得することができます。あなたは、このロジックで

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

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


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

ありがとうございます。これを試してみよう。 – Dany4k

+0

それは動作していない、任意のアイデアなぜですか?私はこれを私のmain()の中に置くか、新しいクラスを作る必要がありますか? – Dany4k

+0

@ Dany4k列挙型を作成します。彼はこれを行うためのコードを投稿しました。 – Iucounu

1

例えば

、あなたはそれをすることにより、カスタムオーダーを使用することができますが、あなたはどのように優先順位で注文するを指定する必要があります。コードを変更する必要はありません。

+0

私はちょうどこれを行い、私はカラーでエラーを取得しています。 "Colorの定義は含まれておらず、拡張メソッドColorもありません。 – Dany4k

+0

@ Dany4k Colorは一例です。sick.Colorを' sick.TheNameOfThePropertyThatHoldsTheColorValueOnTheObjectUtente'に変更する必要があります。 – Guilherme

+0

"sick"はUtenteオブジェクトの1つのインスタンスです。あなたの例では、Utenteクラス定義のコードを提供していないので、私の例の "Color"は単にプレースホルダープロパティです。オブジェクト "Utente"の色を保持するプロパティに変更する必要があります。 – Guilherme

0

優先キューの主な点は、さまざまな優先順位で何が追加されているのかを把握し、順番に保持することです。そうするためには、正しく構築されたデータ構造が本当に必要です。あるいは、組み込みの.NET構造を何度も並べ替えようと呼びかけてしまうと、構文的にもパフォーマンス上も悪いことになります。

ここにあなたの目的のために正常に動作する必要がありますプライオリティキューのint型優先の実装があります:あなたは、その機能が必要な場合PriorityQueue source

同時バージョンは、ここにある: ConcurrentPriorityQueue source

int型順序付けされた優先度キューは、列挙型がいくつかの構文的な砂糖が追加された整数型であるため、列挙型で正常に動作します。 :) お役に立てれば!

関連する問題