Ios 在列表中查找X和Y的4个最近位置
我有以下课程:Ios 在列表中查找X和Y的4个最近位置,ios,arrays,swift,list,sorting,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 } } 在另一节课上,我有一个信标列表: 问题:我得到坐标X(Int)和Y(Int),我会知道列表中距离我最近的4个IBeacon 添加一个helpe
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
}
}
在另一节课上,我有一个信标列表:
问题:我得到坐标X(
Int
)和Y(Int
),我会知道列表中距离我最近的4个IBeacon
添加一个helper函数来计算信标之间的距离(我们可以去掉讨厌的平方根,因为我们只是比较距离):
然后使用我们刚刚实现的distanceSquared
函数进行排序:
var listIBeacon = [IBeacon]()
let myBeacon: IBeacon = ...
listIBeacon.sort {
let dist0 = myBeacon.distanceSquared(to: $0)
let dist1 = myBeacon.distanceSquared(to: $1)
return dist0 < dist1
}
不太确定你的问题是什么?您是否正在尝试根据指定的IBeacon实例计算最近的信标?或者您正在尝试确定阵列中彼此最接近的4个?根据精度或RSSI对信标阵列进行排序,您将在阵列的第一个位置获得最接近的信标,在最后一个位置获得最大的信标。然后,您可以检索我建议使用
.prefix(4)
@Alexander顺便说一句,数组
API对于像我这样的Java恢复者来说太丰富了,哈哈:-)@PauloMattos注意prefix返回数组片段
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
}
}
var listIBeacon = [IBeacon]()
let myBeacon: IBeacon = ...
listIBeacon.sort {
let dist0 = myBeacon.distanceSquared(to: $0)
let dist1 = myBeacon.distanceSquared(to: $1)
return dist0 < dist1
}
let closestBeacons = Array(listIBeacon.prefix(4))