检测数字何时彼此接近

时间:2016-06-07 16:49:38

标签: swift properties observers

在Swift中,我有一个方法可以生成如下的数字集:

86.9238759555414
86.4558606813632
86.4277950105986
86.6055803862833
86.1875587264579
86.7055257286376
86.7445244949838
86.5632505027143
86.7381593407261 // This will trigger a function, because 4 consecutive numbers are within .3 range. 

每秒都会将一个数字添加到此集合中。我希望能够检测到4个连续数字何时在彼此的.3范​​围内。在上面设置的数字中,这将发生在最后一个数字86.7381593407261之后,因为之前的3个数字都在.3之内。

我在swift写作的尝试如下:

属性:

var counter = 0
var maxValue = 0.0
var minValue = 0.0

公式:

// set max - works properly.
if currentValue > maxValue {
    maxValue = currentValue
}

// set min - not working. the min always prints 0.0
if currentValue < currentValue {
    minValue = currentValue
}

if maxValue - currentValue <= 0.3 && minValue + currentValue <= 0.3{
    //if it passes the previous 2 conditions, increment the counter and update max/min appropriately.
    counter += 1
}
// If it doesn't, reset the counter to 0, and reset max and min to the Int min and max values, respectively.
else {
    counter = 0
    // reset max and min to the Int min and max values, respectively.
    minValue = DBL_MAX
    maxValue = DBL_MIN
}
if counter == 4 {
    // celebrate
}

1 个答案:

答案 0 :(得分:1)

以下是解决方案的概要:

  • 保留三个变量:
    • 一个count,代表传递数字的当前“连胜”,
    • a max,表示当前条纹中的最大值,
    • a min,表示当前条纹中的最小值
  • 每次有新号码进入时
    • 如果小于max,请确保它在0.3的{​​{1}}内
    • 如果它大于max,请确保它在min分钟内
    • 如果它通过了前两个条件,请递增计数器并相应地更新0.3 / max。如果没有,请将计数器重置为0,并将minmax分别重置为min最小值和最大值。
  • 当你的柜台达到4时,庆祝