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 回答