0

foreach内にforeachがネストされています。dが他のすべてのdよりも小さいかどうかを確認する必要があります。これどうやってするの?変数が以前に設定されたものを確認する方法があれば、私はこれを自分で行うことができます。そうでない場合は、解決策を考案していただけますか?

これが私のコードです:

foreach (DataRow newRow1 in dt.Rows)
            {
                string zipCode1 = newRow1[2].ToString();
                double latitude2 = Convert.ToDouble(newRow1[3]);
                double longitude2 = Convert.ToDouble(newRow1[4]);

                foreach (DataRow newRow2 in dt2.Rows)
                {
                    if (newRow2[2].ToString().Equals(zipCode1))
                    {
                        newRow1[5] = newRow2[1].ToString();
                        double latitude = Convert.ToDouble(newRow1[3]);
                        double longitude = Convert.ToDouble(newRow1[4]);
                        double d = Math.Sqrt(Math.Abs(latitude - latitude2) * Math.Abs(latitude - latitude2) + Math.Abs(longitude - longitude2) * Math.Abs(longitude - longitude2));
                        Console.WriteLine("Found match!");
                    }
                }
            }
4

1 に答える 1

2

minこれは、線形検索による検索の古き良きアルゴリズムと同等です。

foreach (DataRow newRow1 in dt.Rows)
        {
            string zipCode1 = newRow1[2].ToString();
            double latitude2 = Convert.ToDouble(newRow1[3]);
            double longitude2 = Convert.ToDouble(newRow1[4]);

            // Start minD at the max value
            double minD = double.MaxValue;
            foreach (DataRow newRow2 in dt2.Rows)
            {
                if (newRow2[2].ToString().Equals(zipCode1))
                {
                    newRow1[5] = newRow2[1].ToString();
                    double latitude = Convert.ToDouble(newRow1[3]);
                    double longitude = Convert.ToDouble(newRow1[4]);
                    double d = Math.Sqrt(Math.Abs(latitude - latitude2) * Math.Abs(latitude - latitude2) + Math.Abs(longitude - longitude2) * Math.Abs(longitude - longitude2));
                    minD = Math.Min(minD, d);
                    Console.WriteLine("Found match!");
                }
            }
            Console.WriteLine("Min D: {0}", minD);
        }
于 2012-06-25T15:38:38.817 に答える