Arrays 按双值Swift对词典排序

Arrays 按双值Swift对词典排序,arrays,swift,dictionary,Arrays,Swift,Dictionary,我有一个带有地名和坐标的Firebase数据库,将它们都提取出来,放入各自的数组,然后放入字典,我希望字典按最近的位置/最低的双排序 我看了很多以前问过的问题,但似乎不知道我做错了什么。当我打印字典时,它会按字母顺序排列(交叉检查了(实际)距离,我知道它们是正确的) 我如何按最低的双倍订购 var placeName = "" var distanceArray = [Double]() var nameDistanceDictionary = [String:Double]() 内部从Fir

我有一个带有地名和坐标的Firebase数据库,将它们都提取出来,放入各自的
数组
,然后放入
字典
,我希望
字典
按最近的位置/最低的
排序

我看了很多以前问过的问题,但似乎不知道我做错了什么。当我打印字典时,它会按字母顺序排列(交叉检查了(实际)距离,我知道它们是正确的)

我如何按最低的
双倍
订购

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]
我已经试过了(打印内容与上面相同,减去
[“”]

(数组(self.namedancedictionary.sorted{$0.1<$1.1})中(k,v)的
{
打印(“\(k):\(v)”)
}

词典中的每一项都有两个属性: ()

您不必从字典中创建数组。只需按项值对字典排序即可

.sorted(by: {$0.value < $1.value})
现在,如果您想打印值和键,只需使用

print(item.value)

更换每个回路的整体:

for (k,v) in (Array(self.nameDistanceDictionary).sorted {$0.1 < $1.1}) {
    print("\(k):\(v)")
}
(数组(self.namedancedictionary.sorted{$0.1<$1.1})中(k,v)的
{
打印(“\(k):\(v)”)
}
用这个

for item in nameDistanceDictionary.sorted(by: {$0.value < $1.value}) {
    print("\(item.key):\(item.value)")
}
nameDistanceDictionary.sorted中项的
(按:{$0.value<$1.value}){
打印(“\(item.key):\(item.value)”)
}

如果您将模型存储为
结构体,而不是尝试进行一些
字典
破解,那么您的生活会轻松得多。请尝试以下操作:

struct Place {
    let name: String
    let distance: Double
}

let places = [Place(name: "Ascot", distance: 5.5),
              Place(name: "Birmingham", distance: 1.2),
              Place(name: "Bristol", distance: 18.6),
              Place(name: "London", distance: 0.3),
              Place(name: "Manchester", distance: 40.2),
              Place(name: "Newcastle", distance: 2.4)]

for place in places.sorted(by: { $0.distance < $1.distance }) {
    print(place.name)
}
struct-Place{
let name:String
距离:双倍
}
让地点=[地点(名称:“Ascot”,距离:5.5),
地点(名称:“伯明翰”,距离:1.2),
地点(名称:“布里斯托尔”,距离:18.6),
地点(名称:“伦敦”,距离:0.3),
地点(名称:“曼彻斯特”,距离:40.2),
地点(名称:“纽卡斯尔”,距离:2.4)]
用于place in places.排序(按:{$0.distance<$1.distance}){
打印(地点、名称)
}

基本上,字典总是无序的。for
循环从字典中创建一个元组数组。您的示例分别使用一个键/值对打印多个字典。因此,因为我创建了多个字典,所以它会对它们进行排序,但只有一个值需要排序?它仍在打印精确的值相同的thing@TsGDev真的吗?你为每个循环重写了整个循环吗?我按照你在上一个代码块中所说的重写了它,但它仍然像开始时那样打印,我很抱歉confused@TsGDev等等,它只打印一个值吗?它像以前一样打印两个值,但它们不是按最近的位置排序的(这将是最低的
Double
)-它们仍然是按字母顺序排列的问题是我正在从Firebase数据库中获取位置,因此您所说的将是完美的,除了位置来自大型数据库的坐标,因此无法硬编码it@TsGDev从数据库接收项目并将其附加到arra时,可以尝试创建Place结构Y
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)")
}
struct Place {
    let name: String
    let distance: Double
}

let places = [Place(name: "Ascot", distance: 5.5),
              Place(name: "Birmingham", distance: 1.2),
              Place(name: "Bristol", distance: 18.6),
              Place(name: "London", distance: 0.3),
              Place(name: "Manchester", distance: 40.2),
              Place(name: "Newcastle", distance: 2.4)]

for place in places.sorted(by: { $0.distance < $1.distance }) {
    print(place.name)
}