Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在列表中查找X和Y的4个最近位置_Ios_Arrays_Swift_List_Sorting - Fatal编程技术网

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