0

次のコードは、2点で最も近い距離を計算します。パーツif(j==0)はUsedServices.Count-1回冗長にテストされていますが、この冗長性を導入しない方法はありますか?もちろん、ケースをforループから分離することもできますが、これを実現するためのよりエレガントな方法があると思います。

double[] nearestDistant=new double[UnUsedServices.Count];

for (int i=0;i<UnUsedServices.Count;i++)
{
    for (int j=0;j<UsedServices.Count;j++)
    {
        double distance=GetDistance(UnUsedServices[i].coords, 
                                    UsedServices[j].coords);

        if (j==0) //Used once and redundant for UsedServices.Count-1 time!
        {
            nearestDistant[i] = distance;
        }
        else
        {
            nearestDistant[i] = Math.Min(nearestDistant[i], distance);
        }
    }
}
4

4 に答える 4

3

内側のループの前に初期化nearestDistant[i]してから、を削除することができます。Double.MaxValueif

これの副作用はUsedServices.Count == 0nearestDistant[i]がに設定される場合Double.MaxValueです。もしあなたが良いなら。

于 2012-10-10T02:29:15.970 に答える
0

式の評価と分岐予測について心配している場合は、心配する必要はありません。最適化するのはコンパイラに任せてください。

コードごとに合理化する場合は、「?」三項演算子はオプションです:

nearestDistant[i] = j == 0 ? distance : Math.Min(nearestDistant[i], distance);
于 2012-10-10T02:29:27.813 に答える
0
for(int i=0;i<UnUsedServices.Count;i++)
{
    if(UsedServices.Count > 0)
    {
      double distance=GetDistance(UnUsedServices[i].coords, UsedServices[0].coords);
       nearestDistant[i] = distance;
    }

    for(int j=1;j<UsedServices.Count;j++)
    {
        double distance=GetDistance(UnUsedServices[i].coords, UsedServices[j].coords);

        nearestDistant[i] = Math.Min(nearestDistant[i], distance);
    }
}
于 2012-10-10T02:30:50.667 に答える
0

'j'ループに入る前に、nearestDistant[i]を任意の距離値よりはるかに大きい数に初期化するのはどうですか。その後、あなたは使用することができます

 double[] nearestDistant=new double[UnUsedServices.Count];

for(int i=0;i<UnUsedServices.Count;i++)
            {

            nearestDistant[i] = <A REALLY HUGE NUMBER>

            for(int j=0;j<UsedServices.Count;j++)
            {
                double distance=GetDistance(UnUsedServices[i].coords, UsedServices[j].coords);

                nearestDistant[i] = Math.Min(nearestDistant[i], distance);
            }
        }
于 2012-10-10T02:31:00.313 に答える