2017-06-06 184 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

是的,這是我正在得到的。你不需要對字典進行排序,你可以從字典中創建一個排序數組,然後用它來構建最終的註釋數組(儘管在問題編輯之前我不知道註釋數組的要求)。 –