所以我有一個自定義對象的數組,它具有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. tableview按距離排序swift
- 3. Swift Firebase按距離排序
- 4. 按原點距離對座標數組進行排序
- 5. LINQ - 按距離排序(計算值)
- 6. 如何根據距離數據庫的距離對數組進行排序
- 7. 算法根據距離源的距離對圖中的頂點進行排序
- 8. 按照Django在Amazon RDS上的距離對點進行排序
- 9. 如何按距離排序數組iOS
- 10. 按Linq排序進行數學計算
- 11. 按距離排序
- 12. 排序數組的距離
- 13. 排序ListView後計算距離
- 14. 如何按距離對Solr查詢進行排序?
- 15. 按距離對結果列表進行排序
- 16. 按距離當前位置對TableView進行排序
- 17. 按降序對數組進行排序
- 18. 按降序對數組進行排序
- 19. 按升序對數組進行排序
- 20. 在Swift中對NSDate對象的單維數組進行排序
- 21. 如何在分段表視圖中對距離進行排序?
- 22. 排序算法最適合對排序數組進行排序
- 23. 按計算出的距離排序MySQL結果(未存儲在數據庫中的距離)
- 24. 按照郵政編碼距離的升序對用戶進行計算和排序的最快方法
- 25. 計算成對simhash「距離」
- 26. 組合兩個數組並對數組進行排序Swift
- 27. 在Swift中對協議數組進行排序?
- 28. 如何在swift中對多維數組進行排序?
- 29. 在swift中對數組進行排序3
- 30. 如何在Swift中對數組進行排序?
嗯,爲什麼排序函數返回一個布爾?什麼是回報值由什麼決定的?這可能很明顯,但我有點困惑:) – ardevd
讓我們假設你有一個Int [2,4,6]的數組,sort函數在第一次迭代中傳遞給函數2和4,如果2是如果不是4(假如沒有返回2 <4),則返回4,否則返回4和6,依此類推。如果數組的第一個元素的值較低,那麼函數應該返回true,第二個元素讓sort函數知道如何對它進行排序。 – Greg