计算用户平均速度的最快方法是啥?
Posted
技术标签:
【中文标题】计算用户平均速度的最快方法是啥?【英文标题】:The quickest way to calculate a user's average speed?计算用户平均速度的最快方法是什么? 【发布时间】:2017-06-09 22:05:00 【问题描述】:我正在使用位置管理器并尝试计算用户在过去 60 秒内的平均速度。
当didUpdateLocations
被调用时,我每秒都会从位置管理器获取用户的速度。然后我将该速度附加到一个数组中。
我的计划是根据didUpdateLocations
中记录的这组速度计算平均速度。
然而,一开始,数组是空的。尽管它每秒都会填充一次,但我仍然想计算平均速度,即使该阵列还没有 60 个速度。在这种情况下,我只能使用记录的值,例如,在 5 秒和 5 次速度之后,将使用这些值计算平均速度。随着时间的推移,数组被填充,最新的速度值的附加使得最旧的速度值从数组中被删除。
有没有更简单的方法来做到这一点?
【问题讨论】:
【参考方案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)
【讨论】:
声明var speeds = Array<Float>()
破坏了我的其他类 for location in locations minLat = min(minLat, location.latitude) minLng = min(minLng, location.longitude) maxLat = max(maxLat, location.latitude) maxLng = max(maxLng, location.longitude)
中的某些内容,最后两行给出错误:“无法调用非函数类型'int'的值
@user2265192 您可能有一个名为max
的函数。将您的 max
变量更改为其他名称,例如 maxSpeed
。以上是关于计算用户平均速度的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章