この長いネストされたforループを減らし、if条件を減らして読みやすさを向上させ、将来の参照用に最適化することは可能ですか。
スケジューリングアプリのコードを書いていると、次のような方法になりました。本当に、私はこのようなデータ構造を持っています。ここで、チェックします-同じツールを同時に使用するステージ(LCycle内)がありますか?見つかった場合は、別のメソッドLCycleTimeShift
を呼び出して再配置します。
しかし、新しい配置が適応可能であり、forループカウンターがリセットされて、新しい配置が再度チェックされるかどうかを確認したいと思います。これは、読みやすさを向上させるためのコードを書くためのより良い方法ではないと思います。このトピックに関する少しの調査で、列挙子がこれに役立つことがわかりました。しかし、次のコードでこれをどのように達成できるかわかりません。
public List<LCycle> ToolArrangment(List<LCycle> TimeLineInit)
{
for (int i = 0; i < TimeLineInit.Count; i++)//Each LIfeCycles In TimeLine
{
for (int j = 0; j < TimeLineInit[i].Stage.Count; j++)//Each Stages inTimeLine
{
for (int k = 0; k < i; k++)//Each L esvd =ifeCycles Upto Current LifeCycle
{
for (int l = 0; l < TimeLineInit[k].Stage.Count; l++)//Each Stages of (LifeCycle upto current LifeCycle)
{
for (int m = 0; m < TimeLineInit[i].Stage[j].ToolList.Count; m++)//each tools in stage of timelkine
{
for (int n = 0; n < TimeLineInit[k].Stage[l].ToolList.Count;n++ )// Each tools In that stage (for loop outer of outer)
{
if (TimeLineInit[i].Stage[j].ToolList[m].ToolName == TimeLineInit[k].Stage[l].ToolList[n].ToolName)//If both tools are same (satidfying above for loop conditions)
{
if (IsTimeOverLaps(TimeLineInit[i].Stage[j].StageSpan, TimeLineInit[k].Stage[l].StageSpan))
{//tool using at same time.
Stage ReplaceStage = TimeLineInit[i].Stage[j].DeepCopy();//Taking Copy of stage Span to make time shift
Double TimeDifference=(ReplaceStage.StageSpan.ToTime-ReplaceStage.StageSpan.FromTime).TotalMinutes;//Calculating required time shift
ReplaceStage.StageSpan.FromTime=TimeLineInit[k].Stage[l].StageSpan.ToTime;//FromTime changed accordingly
ReplaceStage.StageSpan.ToTime=ReplaceStage.StageSpan.ToTime.AddMinutes(TimeDifference);//To Time Changed accordingly
LCycleTimeShift(TimeLineInit[i], ReplaceStage);//passing refernce
j = 0; k = 0; l = 0; m = 0; n = 0;//Counter Reset to validate the new arrangment
}
}
}
}
}
}
}
}
return TimeLineInit;
}