2017-06-06 315 views
-1

我想排序的字典,并将其保存到同一个,但有冲突类型:分配排序字典的新字典

无法指定类型的值(INT):(双人间)]将键入[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 
         } 
        }) 

我做的循环来一个简单的认为sortet“字典”将值再次分配到字典中,但它并没有将它们复制作为排序;/

var test = [Int : Double]() 

        for (key, value) in sorted { 
         test[key] = value 
        } 

怎么可能我将已排序的字典分配回字典中已排序的字典?

EDID

对于每一个注释我得从放落针一deistance。我制作了一个字典,其中key是注释ID,value是注释和丢弃点之间的距离。我需要一个字典来识别单元格表视图数据源;哪个注释匹配哪个距离。所以我有一个字典,[Int : Double]和在表视图数据源:

let annotation = mapAnnotations[indexPath.row] 
var distance = dictionary[annotation.ID] 

Reasuming,壳我排序mapAnnotations它是通过valuesObject阵列内部字典,其通过annotationId makred距离?

这将是提前排序由键object.ID的阵列从sorted

谢谢!

+7

字典是键/值对的*无序*集合,您不能“排序”它。 –

+0

@MartinR我还需要一个关键是ID的字典 - 不需要排序,但值必须是。 – yerpy

+0

请更新您的问题并清楚说明您真正需要什么。 –

回答

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

字典本身不能排序,这个概念是没有意义的,因为它们本身就是无序的。当使用字典时,你可以通过它们的可哈希键来访问这些值,所以顺序是不相关的。虽然您可以将键和值作为属性访问,但它们也不会被排序。

排序方法的作用是让您获取字典的排序数组,并返回按您确定的顺序排序的键和值的数组。在这个例子中,它会返回[(key:Int,value:Double)]。所以你不能将它分配给原始字典,因为它不是一个字典,而是一个数组。

然后分配回字典中的额外代码会删除您所做的所有排序,因为正如我所说的,排序字典的概念毫无意义。

+0

是的,这是我正在得到的。你不需要对字典进行排序,你可以从字典中创建一个排序数组,然后用它来构建最终的注释数组(尽管在问题编辑之前我不知道注释数组的要求)。 –