在列表中找到X和Y的最近4个位置

时间:2017-05-16 01:00:38

标签: ios arrays swift list sorting

我有以下课程:

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),我知道列表中{4> 最近 IBeacon {{} 1}}给我。

1 个答案:

答案 0 :(得分:3)

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

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))