Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将已排序的词典分配给新词典_Swift_Swift3 - Fatal编程技术网

Swift 将已排序的词典分配给新词典

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 {

我想对字典进行排序并将其保存到同一个字典中,但存在类型冲突:

无法将类型[(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
                        }
                    })
如何将已排序的词典按我已排序的顺序重新分配给词典

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)
                            }
                        }
                    }