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

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&lt;Float&gt;() 破坏了我的其他类 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

以上是关于计算用户平均速度的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从命令行获取一组数字的平均值的最快方法是啥?

进程间速度最快的通信机制是啥?

SPI器件中的最大速度是啥概念?

梯度的计算公式是啥?

MySQL数据读取速度问题

Spark连接到MySQL并执行查询为啥速度会快