arrays - 按 Double 值 Swift 对字典进行排序

标签 arrays swift dictionary

我有一个包含地名和坐标的 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})

现在为每个循环创建,而不是创建 kv,只需创建 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/

相关文章:

javascript - Angularjs watch 无法处理对象内部的数组

swift - 如何在 Swift SpriteKit 中添加固定背景

python - 3 级字典 python 不明显

json - Python3 将 'CaseInsensitiveDict' 转换为 JSON

Java执行crc检查(将bytearray除以bytearray)

python - 在 Python 中向量化多维函数

python - 如何将 numpy 数组乘以标量

ios - 如何在 NSMutableArray 的 TableView 中添加搜索

ios - 如何为ViewController添加垂直滚动

arrays - 包含 Int 数组的字典 – 获取键和索引的值