完了しなければならない重い計算アルゴリズムがあります。できるだけ効率的にするために、引数の数に基づいて 5 つのメソッドに分割しました。これにより、私は可能な限り節約することができます。とはいえ、ユーザーにそれを認識させたくありません。
public AnalysisResult[] PerformAnalysis(double[] Inputs, double[] Outputs, int[][] Coefficients)
{
AnalysisResult[] AR = new AnalysisResult[Coefficients.Length];
for (int i = 0; i < Coefficients.Length; i++)
AR[i] = GetResults(Inputs, Outputs, /* Based on length of Coefficients[i]*/ );
return AR;
}
private AnalysisResult GetResults(double[] Inputs, double[] Outputs, int A)
{
// Do stuff
}
private AnalysisResult GetResults(double[] Inputs, double[] Outputs, int A, int B)
{
// Do stuff
}
private AnalysisResult GetResults(double[] Inputs, double[] Outputs, int A, int B, int C)
{
// Do stuff
}
private AnalysisResult GetResults(double[] Inputs, double[] Outputs, int A, int B, int C, int D)
{
// Do stuff
}
private AnalysisResult GetResults(double[] Inputs, double[] Outputs, int A, int B, int C, int D, int E)
{
// Do stuff
}
ご覧のとおり、ユーザーがアルゴリズムを呼び出すために使用できる public メソッドを 1 つだけにしたいと考えています。に渡される配列の長さに基づいて、どのプライベート メソッドを呼び出すかを簡単に判断する方法があるかどうか疑問に思っていPerformAnalysis
ます。
助言がありますか?
ここまでの私のアプローチは、配列の長さに基づく switch ステートメントでしたが、もっと良いアプローチがあると思います。
public AnalysisResult[] PerformAnalysis(double[] Inputs, double[] Outputs, int[][] Coefficients)
{
AnalysisResult[] AR = new AnalysisResult[Coefficients.Length];
for (int i = 0; i < Coefficients.Length; i++)
switch (Coefficients[i].Length)
{
case 1:
AR[i] = GetResults(Inputs, Outputs, Coefficients[i][0]);
break;
case 2:
AR[i] = GetResults(Inputs, Outputs, Coefficients[i][0], Coefficients[i][1]);
break;
// Etc
}
return AR;
}