所以我有一个自定义对象的数组,它具有Double纬度和Double经度值。我想根据从特定点到阵列中每个项目的位置的计算距离对数组进行排序。我有一个函数可以根据纬度和经度值计算距离。有没有简单的方法来完成这种排序?在Swift中按计算距离对数组进行排序
回答
这很容易做到。 你的函数计算的距离必须接受一个类型是什么阵列中要排序,并返回布尔,例如两个参数:
// I assumed your array stores MyLocation
func mySortFunc(location1: MyLocation, location2: MyLocation) -> Bool {
// do your calculation here and return true or false
}
var array: [MyLocation] = ...
array.sortInPlace { (loc1, loc2) -> Bool in
mySortFunc(loc1, location2: loc1)
}
假设你有一个模型Place
为对象:
class Place {
var latitude: CLLocationDegrees
var longitude: CLLocationDegrees
var location: CLLocation {
return CLLocation(latitude: self.latitude, longitude: self.longitude)
}
func distance(to location: CLLocation) -> CLLocationDistance {
return location.distance(from: self.location)
}
}
然后数组var places: [Place]
可以被分类为这样的:
places.sort(by: { $0.distance(to: myLocation) < $1.distance(to: myLocation) })
你不应该保证与物体的距离。那不是很好的编码风格。只有在以后需要缓存时才需要它。更好地改变'distance = location.distanceFromLocation(fromLocation!)'到'返回距离= location.distanceFromLocation(fromLocation!)'和order by'places.sortInPlace({$ 0.calculateDistance(YOUR_LOCATION)<$ 1..calculateDistance(YOUR_LOCATION) })' – muescha
@muescha感谢您的评论,更新的答案。 – xoudini
:)我很高兴帮助:) – muescha
- 1. 在Swift中按距离对UItableview进行排序
- 2. Swift Firebase按距离排序
- 3. tableview按距离排序swift
- 4. 按原点距离对坐标数组进行排序
- 5. LINQ - 按距离排序(计算值)
- 6. 如何根据距离数据库的距离对数组进行排序
- 7. 算法根据距离源的距离对图中的顶点进行排序
- 8. 按照Django在Amazon RDS上的距离对点进行排序
- 9. 如何按距离排序数组iOS
- 10. 按Linq排序进行数学计算
- 11. 按距离排序
- 12. 排序数组的距离
- 13. 排序ListView后计算距离
- 14. 按距离对结果列表进行排序
- 15. 如何按距离对Solr查询进行排序?
- 16. 按距离当前位置对TableView进行排序
- 17. 按升序对数组进行排序
- 18. 按降序对数组进行排序
- 19. 按降序对数组进行排序
- 20. 在Swift中对NSDate对象的单维数组进行排序
- 21. 如何在分段表视图中对距离进行排序?
- 22. 排序算法最适合对排序数组进行排序
- 23. 按计算出的距离排序MySQL结果(未存储在数据库中的距离)
- 24. 按照邮政编码距离的升序对用户进行计算和排序的最快方法
- 25. 计算成对simhash“距离”
- 26. 组合两个数组并对数组进行排序Swift
- 27. 如何在Swift中对数组进行排序?
- 28. 在Swift中对协议数组进行排序?
- 29. 如何在swift中对类型数组进行排序?
- 30. 在swift中对数组进行排序3
嗯,为什么排序函数返回一个布尔?什么是回报值由什么决定的?这可能很明显,但我有点困惑:) – ardevd
让我们假设你有一个Int [2,4,6]的数组,sort函数在第一次迭代中传递给函数2和4,如果2是如果不是4(假如没有返回2 <4),则返回4,否则返回4和6,依此类推。如果数组的第一个元素的值较低,那么函数应该返回true,第二个元素让sort函数知道如何对它进行排序。 – Greg