我正在使用位置管理器并尝试计算用户在过去 60 秒内的平均速度。
当 didUpdateLocations
被调用时,我每秒从位置管理器获取用户的速度。然后我将该速度附加到一个数组。
我的计划是根据 didUpdateLocations
中记录的速度数组计算平均速度。
但是,在开始时,数组是空的。虽然它每秒都会填充一次,但我仍然想计算平均速度,即使阵列还没有 60 种速度。在这种情况下,我只能使用记录的值,例如,在 5 秒和 5 种速度后,将使用这些值计算平均速度。一段时间后,数组被填充,最新的速度值的附加使得最旧的速度值从数组中移除。
有没有更简单的方法来完成这个?
最佳答案
您目前的解释听起来是正确的。您仍然可以在阵列未满的情况下获得平均速度。您可以像这样设置速度阵列:
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)
关于ios - 计算用户平均速度的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467307/