2016-12-28 143 views
0

只是想知道如何字典在Swift中排序。例如下面的代碼。Swift字典排序

var occupations = [ 
"Malcolm": "Captain", 
"Kaylee": "Mechanic"] 

occupations["Jayne"] = "Pirate" 

for (name, occupation) in occupations{ 
print("\(name) is a \(occupation)") 
} 

結果看起來像這樣

Kaylee is a Mechanic 
Malcolm is a Captain 
Jayne is a Pirate 

我的問題的立場。循環如何決定首次通過上述循環的名稱(或鍵)?

+4

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID113:*「字典存儲具有**沒有定義的排序**的集合中相同類型和相同類型的值的鍵。「* –

+0

閱讀哈希表,這是Swift的'Dictionary'用於存儲元素的方式。元素在表中的位置主要取決於它的哈希值和表中的存儲區數量,其次是關於散列表處理衝突 – Hamish

+0

如果您只是好奇,那很好,但是請記住,絕不應該編寫依賴於字典順序的代碼,因爲它沒有定義的順序,所以它們有權更改不同版本之間的順序操作系統/語言 – PeejWeej

回答

1

從蘋果Collection Types Documentation:同一類型的鍵和 之間

字典保存協會沒有定義順序的集合中的相同類型的值。每個 值都與一個唯一密鑰相關聯,該密鑰充當字典中值爲 的標識符。 與數組中的項目不同, 中的項目字典做而不是具有指定的順序

默認情況下,字典數據結構具有未指定的排序,意味着每次您將遍歷它時,您可能會有不同的排序。不過,您可以根據的值對其進行排序,但它們都表示爲數組。

所以,讓我們說你要基於鍵排序:

var occupations = [ 
    "Malcolm": "Captain", 
    "Kaylee": "Mechanic"] 

occupations["Jayne"] = "Pirate" 

for key in occupations.keys.sort() { 
    print("KEY: \(key) VALUE: \(occupations[key])") 
} 

控制檯應該顯示-sorted基礎上,鍵 - :

KEY:傑恩VALUE :可選( 「海盜」)

KEY:王小強VALUE:可選( 「機械師」)

KEY:馬爾科姆VALUE:可選( 「隊長」)

注意,值是自選,你可能需要「可選的結合「他們......

希望這對我有所幫助。

+2

具有未指定的排序與無序不同 - 字典有一個順序(它只是未指定的),因此對給定字典的重複迭代不會產生不同的元素順序 - 您將獲得相同的元素但是,添加或刪除元素*可以*更改此順序(再次,未指定順序如何更改)。 – Hamish

+0

@Hamish th註釋,答案已被編輯。 –

0

我認爲你正在尋找的東西是這樣的:

var occupations = [ 
     "Malcolm": "Captain", 
     "Kaylee": "Mechanic"] 

    occupations["Jayne"] = "Pirate" 

    let unsortedKeys = occupations.keys //get dictionary keys 
    let sortedKeys = unsortedKeys.sorted(by: <) //sort dictionary keys 
    for key in sortedKeys { 
     print("\(key) is a \(occupations[key])") 
    } 

希望幫助