我想对字典进行排序,并将其保存到同一个字典中,但存在类型冲突:
无法将类型( 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循环循环思想排序组“字典”,再一次将值赋值给字典,但是它没有按排序复制它们;/
var test = [Int : Double]()
for (key, value) in sorted {
test[key] = value
}如何将排序的字典按我已排序的顺序分配回字典?
EDID
对于每一个注释,我都必须从掉下的引脚中得到一个止损符。我制作了一个字典,其中key是注释ID,而value是注释和删除点之间的距离。我需要一个字典来识别视图中的单元格表视图数据源;哪个注释匹配哪个距离。因此,我有一个带有[Int : Double]和表视图数据源的字典:
let annotation = mapAnnotations[indexPath.row]
var distance = dictionary[annotation.ID]Reasuming,shell I对mapAnnotations进行排序,它是Object的数组,通过values在字典中使用annotationId生成的距离?
它将按照来自object.ID的键对sorted数组进行排序。
提前感谢!
发布于 2017-06-06 09:54:34
我解决了我的问题。
第一:
必须使用以下方法对字典中的值进行排序:
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)
}
}
}发布于 2017-06-06 08:05:16
字典本身是无法分类的,概念是毫无意义的,因为它们本质上是无序的。在使用字典时,您可以通过它们的hashable键访问这些值,因此顺序是不相关的。虽然您可以将键和值作为属性访问,但它们也没有排序。
排序方法所做的是允许您获得字典的排序数组,并且它返回按您确定的顺序排序的键和值的元组数组。在这个示例中,它将返回(key: Int,value: Double)。所以你不能把它分配回原来的字典,因为它不是一个字典,而是一个数组。
然后分配给字典的额外代码删除了您所做的所有排序,因为正如我所说的,对字典排序的概念是没有意义的。
https://stackoverflow.com/questions/44384213
复制相似问题