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;
}
迭代出来的怕是有上百万数据,求相同功能的优化代码!