現在の色のリストには色の優先度は表示されません。色はランダムな順序で表示されます。あなたが今しなければならないのは、優先順位によってソート患者である
static ConsoleColor[] ticketPriorities = { // give descriptive name to list of priorities
ConsoleColor.Green,
ConsoleColor.Yellow,
ConsoleColor.Red,
ConsoleColor.Magenta
};
とに割り当てる:あなたはまだConsoleColorsを(下記の注意事項を参照)を使用したい場合は、少なくともその順番で各色の優先順位を定義する必要があります医者。それは、順序付けられた患者のリスト内の患者の指標によって行うことができる。すべてが単一のLINQクエリによって行われます。
var assignments = ListSickPeople
.OrderByDescending(p => ticketPriorities.IndexOf(p.Priority))
.Select((patient,index) =>
new {
Patient = patient,
Doctor = ListDoctor[index % ListDoctor.Count]
});
これは、患者と医師の割り当てを順序付けしたペアを提供します。
注 - お客様のビジネスルールではUIの項目であるConsoleColor
を使用することは好ましくありません。優先順位としてカラー名を使用することはできますが、システムコンソールでサポートされている色ではなく、患者優先度のドメイン概念でなければなりません。例えば -
public enum TicketPriority
{
Low, // Green
Normal, // Yellow
High, // Red
Top // Magenta
}
ConsoleColor
のもう一つの問題は、あなたが患者の優先順位に任意のコンソールの色を割り当てることができるということです。それはむしろ、チケットのデザインよりも優先順位を意味する名前を使用する方が良いでしょうけどWhite
またはBlack
。
このような事前定義された課題のもう1つの問題は、医者への訪問のたびに全く同じ時間(たとえば15分)がかかることです。さもなければ、より優先順位の低い患者は、優先順位の高い患者の前に自分の医者を訪問することができる。それを解決するには、医者のプールを作成して、無料の患者の待ち行列(Queye<T>
)に次の患者を連れていかなければなりません。
医者のいずれも患者の財産を持っておらず、患者も医者の財産を持っていません –
しかしこれを行うには、各クラスにプロパティを追加する必要がありますか? – Dany4k
私はちょうど医者に何を割り当てるのか、そしてここで色がどのような役割を果たすのかは全く分かりません。私が間違っていると私を訂正してください - ランダムに割り当てられた20人の患者がいて、それらの患者を6人の医師に割り当てる必要があります。マゼンタ色の患者が最初に割り当てられるように、赤色の患者は無料の医師に割り当てられるか、すでにマゼンタ患者が割り当てられている医者にキューに追加されます。 –