我有一个包含地名和坐标的 Firebase 数据库,已获取这两个数据库并将它们分别放入自己的 Array
中,然后放入 Dictionary
中,我想要 Dictionary
按最近位置/最低 Double
排序。
我已经查看了大量以前提出的问题,但似乎无法弄清楚我做错了什么。当我打印字典时,它会按字母顺序对它们进行排序(交叉检查(实际)距离后我知道它们是正确的)。
我如何按最低Double
订购?
var placeName = ""
var distanceArray = [Double]()
var nameDistanceDictionary = [String:Double]()
在内部从 Firebase 获取数据
self.placeName = placeSnap.key
let distanceRound = Double(round(10*distance)/10)
self.distanceArray.append(distanceRound)
self.nameDistanceDictionary = [self.placeName:distanceRound]
print(self.nameDistanceDictionary)
//Prints (example Doubles)
["Ascot": 5.5]
["Birmingham": 1.2]
["Bristol" : 18.6]
["London": 0.3]
["Manchester": 40.2]
["Newcastle": 2.4]
我已经尝试过(这打印的内容与上面相同,减去 [""]
for (k,v) in (Array(self.nameDistanceDictionary).sorted {$0.1 < $1.1}) {
print("\(k):\(v)")
}
最佳答案
字典中的每个项目都有两个属性: 键和值 ( more about dictionary here )
您不必从字典创建数组。只需按项目值对字典进行排序即可。
.sorted(by: {$0.value < $1.value})
现在为每个循环创建,而不是创建 k
和 v
,只需创建 item
来表示字典中的每个项目。
for item in ...
现在,如果您想打印值和 key ,只需使用
print(item.value)
和
print(item.key)
替换每个循环的整体:
for (k,v) in (Array(self.nameDistanceDictionary).sorted {$0.1 < $1.1}) {
print("\(k):\(v)")
}
有了这个
for item in nameDistanceDictionary.sorted(by: {$0.value < $1.value}) {
print("\(item.key):\(item.value)")
}
关于arrays - 按 Double 值 Swift 对字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286990/