我想对字典进行排序并将其保存到同一个字典中,但存在类型冲突:
不能将[(Int):( Double)]类型的值赋给[Int:Double]类型。
dictionary = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in
if elem1.value < elem2.value {
return true
} else {
return false
}
})
我知道在排序后它不再是字典。
let sorted = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in
if elem1.value < elem2.value {
return true
} else {
return false
}
})
我已经做了一个简单的for循环来循环思考sortet“字典”再次为字典赋值,但它不会将它们复制为已排序; /
var test = [Int : Double]()
for (key, value) in sorted {
test[key] = value
}
我怎样才能将排序后的字典分配给我已经排序的orded中的字典?
EDID
对于每个注释,我必须得到掉落引脚的保留。我创建了一个字典,key
是注释ID,value
是注释和删除点之间的距离。我需要一个字典来识别单元格 - 表格视图数据源;哪个注释匹配哪个距离。所以我有一个带[Int : Double]
的字典和表视图数据源:
let annotation = mapAnnotations[indexPath.row]
var distance = dictionary[annotation.ID]
重新认识,shell我在字典中对mapAnnotations
数组Object
进行排序,其距离由annotationId制作?
它将使用来自values
提前致谢!
答案 0 :(得分:1)
字典本身无法排序这个概念毫无意义,因为它们本质上是无序的。使用字典时,您可以通过哈希键访问值,因此顺序无关紧要。虽然您可以将键和值作为属性访问,但它们也没有排序。
排序方法的作用是允许您获取字典的排序数组,并返回按键和值的数组,并在您确定时对其进行排序。在示例中,它将返回[(key:Int,value:Double)]。因此,您无法将其分配回原始字典,因为它不是字典,而是数组。
然后分配回字典的额外代码将删除您已完成的所有排序,因为正如我所说,排序字典的概念毫无意义。
答案 1 :(得分:-2)
我已经解决了我的问题。
第一:
必须使用以下方法对字典中的值进行排序:
let sorted = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in
if elem1.value < elem2.value {
return true
} else {
return false
}
})
然后我创建了一个数组,它将通过sorted
键对注释进行排序。
for (key, _) in sorted {
for ann in mapAnnotations {
if ann.ID == key {
sortedArray.append(ann)
}
}
}