qq_36769719 2018-11-16 05:56 采纳率: 100%
浏览 679
已采纳

优化代码,加快迭代速度

int count = dt.Rows.Count;
bool bGoOn = false; // 标志位, 默认迭代结束
List Min1_WaveLength = new List();
List Minn_WaveLength = new List();
List Min1_Strength = new List();
List Minn_Strength = new List();
//第一次迭代
while (true)
{
for (int i = 1; i < count - 2; i++)//迭代count - 2,减去第一个强度值和最后一个强度值
{
if (i < count - 1)//极限值count-1
{
double A_Strength = Convert.ToDouble(dt.Rows[i][2]);
double X_Strength = Convert.ToDouble(dt.Rows[i - 1][2]);
double I_Strength = Convert.ToDouble(dt.Rows[i + 1][2]);

                     double Aln_Strength = Math.Sqrt(A_Strength);   //迭代初始值
                    double Xln_Strength = Math.Sqrt(X_Strength);   //迭代初始值
                    double Iln_Strength = Math.Sqrt(I_Strength);   //迭代初始值


                    double X_WaveLength = Convert.ToDouble(dt.Rows[i][1]);
                    double Avg_Strength = (Xln_Strength + Iln_Strength) / 2;
                    if (Aln_Strength < Xln_Strength && Aln_Strength < Iln_Strength)
                    {
                        Min1_WaveLength.Add(X_WaveLength);
                        Min1_Strength.Add(Aln_Strength);
                        dt.Rows[i][1] = X_WaveLength;
                        dt.Rows[i][2] = Aln_Strength; //替代中间值
                    }
                }
            }
            if (!bGoOn) // bGonOn == FALSE,表示整个for循环里都是符合要求的,退出
                break;
        }
        //第一次以外的迭代
        while (true)
        {

            for (int j = 1; j < count-2; j++)//迭代count - 2,减去第一个强度值和最后一个强度值
            {
                if (j < count -1)//极限值count-1
                {
                    double A_Strength = Convert.ToDouble(dt.Rows[j][2]);
                    double X_Strength = Convert.ToDouble(dt.Rows[j - 1][2]);
                    double I_Strength = Convert.ToDouble(dt.Rows[j + 1][2]);

                    double X_WaveLength = Convert.ToDouble(dt.Rows[j][1]);
                    double Avg_Strength = (X_Strength + I_Strength) / 2;
                    if (A_Strength > Avg_Strength)
                    {
                        dt.Rows[j][1] = X_WaveLength;
                        dt.Rows[j][2] = Avg_Strength; // 取平均替代中间值

                        bGoOn = true; // 表示需要再循环一次
                    }
                }
            }
            if (!bGoOn) // bGonOn == FALSE,表示整个for循环里都是符合要求的,退出
                break;
        }
                    迭代出来的怕是有上百万数据,求相同功能的优化代码!
  • 写回答

1条回答 默认 最新

  • devmiao 2018-11-16 12:37
    关注

    while (true)
    {

            for (int j = 1; j < count-2; j++)//迭代count - 2,减去第一个强度值和最后一个强度值
            {
                if (j < count -1)//极限值count-1
                {
                    double A_Strength = Convert.ToDouble(dt.Rows[j][2]);
                    double X_Strength = Convert.ToDouble(dt.Rows[j - 1][2]);
                    double I_Strength = Convert.ToDouble(dt.Rows[j + 1][2]);
    
                    double X_WaveLength = Convert.ToDouble(dt.Rows[j][1]);
                    double Avg_Strength = (X_Strength + I_Strength) / 2;
                    if (A_Strength > Avg_Strength)
                    {
                        dt.Rows[j][1] = X_WaveLength;
                        dt.Rows[j][2] = Avg_Strength; // 取平均替代中间值
    
                        bGoOn = true; // 表示需要再循环一次
                    }
                }
            }
            if (!bGoOn) // bGonOn == FALSE,表示整个for循环里都是符合要求的,退出
                break;
        }
    

    这里可以优化下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助