【问题标题】:Find the 4 closest positions of X and Y on a list在列表中找到 X 和 Y 的 4 个最近位置
【发布时间】:2017-05-16 01:00:38
【问题描述】:

我有以下课程:

class IBeacon {
    var x = Int()
    var y = Int()
    var ID = Int()

   init(id: Int, x :Int, y: Int) {
       self.x = x
       self.y = y
       self.ID = id
   }
}

在另一个班级我有一个信标列表

var listIBeacon = [IBeacon]()

问题:我得到了我的坐标 X (Int) 和 Y (Int),并且我知道listIBeacon 列表中与我最接近的 4 个IBeacon

【问题讨论】:

  • 不太确定您的问题是什么?您是否尝试根据指定的 IBeacon 实例计算最近的信标?或者您是否尝试确定阵列中彼此最接近的 4 个?
  • 根据精度或RSSI对信标数组进行排序,您将在数组的第一个获得最接近的,而在最后一个获得最大的。然后您可以检索前四个信标

标签: ios arrays swift list sorting


【解决方案1】:

添加一个辅助函数来计算信标之间的距离(我们可以放弃讨厌的平方根,因为我们只是比较距离):

extension IBeacon {
    func distanceSquared(to beacon: IBeacon) -> Int {
        let dx = beacon.x - self.x
        let dy = beacon.y - self.y
        return dx*dx + dy*dy
    }
}

然后排序使用我们刚刚实现的distanceSquared函数:

var listIBeacon = [IBeacon]()
let myBeacon: IBeacon = ...
listIBeacon.sort {
    let dist0 = myBeacon.distanceSquared(to: $0)
    let dist1 = myBeacon.distanceSquared(to: $1)
    return dist0 < dist1
}

最后,过滤最近的 4个信标:

let closestBeacons = Array(listIBeacon.prefix(4))

【讨论】:

  • 我会推荐使用.prefix(4)
  • @Alexander BTW,Array API 对于像我这样正在恢复的 Java 人来说实在是丰富了,哈哈 :-)
  • @PauloMattos 注意前缀返回一个数组切片
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多