我有以下课程:
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}}给我。
答案 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))