我看到你在数组中的第一个值始终是你的初始相对最小值和最大值,因为你从一开始就绝对没有比较基础(除非你将 relMin 和 relMax 都设置为 0 或定义一个范围来找到你的 relMin和relMax)。考虑到这一点,鉴于您假设使用 -5 和 6 作为第一个比较对,您的示例背后的逻辑本身就有缺陷。
让我们使用您的数组并使用 For 循环遍历数组...
[-5,-3,-2, 0, 1, 2, 6, 5, 3, 2,-1,-3,-4,-7,-4,-3,...]
0:relMin = -5,relMax = -5,delta = 0
1:relMin = -5,relMax = -3,delta = 2
2:relMin = -5,relMax = -2,delta = 3
3:relMin = -5,relMax = 0,delta = 5
4:relMin = -5,relMax = 1,delta = 6
5:relMin = -5,relMax = 2,delta = 2
6:relMin = -5,relMax = 6,delta = 11
7:
……
13:relMin = -7,relMax = 6,delta = 13
……
本质上,您所做的就是在您当前的增量不等于您之前的增量的任何时候写入您的输出数组。由于 relMin 和 relMax 之间的变化是互斥的(当您遍历数组时,只有其中一个值可以改变)所以您需要检查的是不等式......
//prime your values
//if it make sense for your purposes prime them both with 0
//this also assumes you have at least 1 value in valueArray
relMin = valueArray[0];
relMax = valueArray[0];
//the following line will always be true if you use valueArray[0] as your relMin and relMax baseline
deltaArray[0] = 0;
for (i = 0; i < [valueArray count]; i++)
{
if (valueArray[i] < relMin)
{
relMin = valueArray[i];
}
if (valueArray[i] > relMax)
{
relMax = valueArray[i];
}
deltaPrevious = deltaArray[[deltaArray count] - 1];
deltaCurrent = relMax - relMin;
if (deltaCurrent != deltaPrevious)
{
deltaArray[deltaArray count] = deltaCurrent;
}
}