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