将排序的字典分配给新字典

时间:2017-06-06 07:47:57

标签: 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 {
                            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

的键对object.ID进行排序

提前致谢!

2 个答案:

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