使用Swift根据对象到设备位置的距离对对象列表进行排序



因此,我有一个从具有latitudelongitude属性的网络请求中获得的对象列表。我的目标是根据设备当前位置的接近程度对对象进行排序。我有一个有效的解决方案,但我觉得似乎有一个更优雅的实现。

这是我目前的功能:

func sortItems(items: [Item]) -> [Item] {
var distanceDictionary: [Int: Double] = [:]

guard let location = DefaultsWrapper.shared.lastLocation else {
return items
}

items.forEach { item in
let itemLocation = CLLocation(latitude: item.latitude, longitude: item.longitude)
let distance = item.distance(from: location)
distanceDictionary[item.id] = distance
}

var sortedItemIds: [Int] = []

for (k, _) in (Array(distanceDictionary).sorted {$0.1 < $1.1}) {
sortedItemIds.append(k)
}

var sortedItems: [Item] = []

sortedItemIds.forEach { id in
let itemIndex = items.firstIndex { item in
item.itemId == id
}

if let index = itemIndex {
sortedItems.append(items[index])
}
}

return sortedItems
}

有人能帮我简化这个代码或者提高它的效率吗?

func sortItems(items: [Item]) -> [Item] {
guard let location = DefaultsWrapper.shared.lastLocation else {
return items
}
return items.sorted(by:{$0.distance(from: location) < $1.distance(from: location) })
}

最新更新