[英]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.