Swift 将已排序的词典分配给新词典
我想对字典进行排序并将其保存到同一个字典中,但存在类型冲突: 无法将类型[(Int):(Double)]的值分配给类型[Int:Double]Swift 将已排序的词典分配给新词典,swift,swift3,Swift,Swift3,我想对字典进行排序并将其保存到同一个字典中,但存在类型冲突: 无法将类型[(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 {
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
}
})
如何将已排序的词典按我已排序的顺序重新分配给词典
EDID
对于每一个注释,我都必须从掉下来的针中得到一个指示。我制作了一个字典,其中键
是注释ID,值
是注释和删除点之间的距离。我需要一个字典来识别视图中的单元格-表视图数据源;哪个注释匹配哪个距离。因此,我有一个带有[Int:Double]
和表视图数据源的字典:
let annotation = mapAnnotations[indexPath.row]
var distance = dictionary[annotation.ID]
重新计算,shell I排序mapAnnotations
这是一个通过值的对象数组,其距离由annotationId确定
这将是通过排序的中的键对object.ID数组进行排序
提前谢谢 字典本身是不能分类的。这个概念毫无意义,因为它们本质上是无序的。当使用字典时,您可以通过哈希键访问这些值,因此顺序是不相关的。虽然可以将键和值作为属性访问,但它们也不会排序
sorted方法的作用是让您获得字典的排序数组,并返回一个数组,数组中的键和值按您的决定排序。在本例中,它将返回[(key:Int,value:Double)]。所以不能将其分配回原始字典,因为它不是字典,而是数组
然后分配回字典的额外代码将删除您所做的所有排序,因为正如我所说的,对字典进行排序的概念毫无意义。我已经解决了我的问题
第一:
必须使用以下方法对字典中的值进行排序:
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
}
})
字典是键/值对的无序集合,您无法对其进行“排序”。@MartinR I需要一个键为ID的字典-不需要排序,但必须对值进行排序。请更新您的问题,明确说明您真正需要的内容。已编辑@马丁顿不反对框架。例如,使用一个数组和一个自定义的struct.Yep,这就是我想要的。您不需要对字典进行排序,而是从字典中创建一个排序数组,然后使用它来构建最终的注释数组(尽管在编辑问题之前我不知道注释数组的要求)。
let annotation = mapAnnotations[indexPath.row]
var distance = dictionary[annotation.ID]
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 (key, _) in sorted {
for ann in mapAnnotations {
if ann.ID == key {
sortedArray.append(ann)
}
}
}