簡體   English   中英

Swift中的字典鍵如何排序?

[英]How Are Dictionary Keys Sorted In Swift?

檢查以下字典:

var testDict: [String : Int] = [
    "a" : 1,
    "b" : 2,
    "c" : 3,
    "d" : 4
]

現在,遍歷字典的鍵:

for i in testDict.keys {
    print(i)
}

這將產生以下輸出:

百特

但是,預期的輸出將是編碼順序中的鍵:

A B C D

因為不是這種情況,所以我假設鍵已排序。 如果是這樣,如何對它們進行排序,更重要的是,如何將它們返回到編寫時的順序?

蘋果的文檔

與數組中的項目不同,字典中的項目沒有指定的順序

簡而言之,字典項沒有排序,它們通過其hashValue盡可能有效地存儲(您不應對順序進行任何假設),這就是為什么:

字典鍵類型必須符合哈希協議,例如集合的值類型。

第二個問題是,由於未對字典進行排序,因此您無法將內部的值或鍵返回到原始順序(因為它沒有任何順序)。 您可以執行的操作是按特定順序遍歷所有值和鍵,如下所示:

let dic = ["a" : 1, "b" : 2, "c" : 3, "d" : 4]
for key in dic.keys.sort(<) {
    print("key: \(key), value: \(dic[key])")
}

字典(Swift或NSDictionary )是鍵值映射。 按概念沒有順序。 您輸入一個值(鍵),然后得出該鍵的另一個值(值)。 這不取決於任何順序。

如果要按順序排列鍵,請獲取並排序。

順便說一句:排序和排序之間是有區別的。 有序意味着元素保持其位置。 無論排序方式如何,此訂單都可以不排序。

為了顯示差異,可以考慮這樣創建字典:

var testDict: [String : Int] = [
  "b" : 2,
  "a" : 1,
  "c" : 3,
  "d" : 4
]

如果要訂購字典,則代碼的結果將是:b,a,c,d。 這是字典創建的順序 但是它沒有排序。 (如何排序?注音?從字面上看?字母數字?)

排序的數組(也保持元素的位置)也未排序。 將同NSArray有序集合作為NSArray保留,即使沒有辦法對其進行排序:考慮一個包含字符串,數字和圖像的數組。 該數組保持您放置項目的順序。但是它不知道如何對其進行排序。 (再次:無論排序意味着什么。)在Swift,Objective-C和Foundation的整個生物圈中,只有一個排序的集合: NSIndexSet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM