计算用户平均速度的最快方法是什么?

时间:2017-06-09 22:05:01

标签: ios swift cllocationmanager

我正在使用位置管理器并尝试计算用户在过去60秒内的平均速度。

当调用didUpdateLocations时,我每秒都会从位置管理器获得用户的速度。然后我将该速度附加到数组中。

我的计划是根据didUpdateLocations中记录的这一系列速度计算平均速度。

但是,在开始时,数组为空。虽然它每秒都会填充,但我仍然想要计算平均速度,即使阵列还没有60速度。在这种情况下,我只需要使用记录的值,例如,在5秒和5个速度之后,将使用这些值计算平均速度。一段时间后,数组将被填充,并且附加最新的速度值会使最旧的速度值从阵列中删除。

有更简单的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

您当前的解释听起来不错。您仍然可以获得平均速度,而无需使用阵列。您可以像这样设置速度数组:

let max = 60
var speeds = Array<Float>()

然后,每次调用didUpdateLocations方法时,都可以将用户的速度添加到此speeds数组中。但是,由于您不希望阵列超过60个项目,因此您可以设置最大值并删除较旧的速度以将长度保持为60.您可以这样实现:

// In didUpdateLocations():    

if speeds.count == max {
    speeds.remove(at: 0)
}

speeds.append(newSpeed)

然后,要计算它们的平均速度,只需从速度数组中取出项目,然后将它们的总和除以它们的数量来平均它们。

var total: Float = 0.0
speeds.forEach { speed in
    total += speed
}

var averageSpeed = total / Float(speeds.count)
print(averageSpeed)