ios - sort - swift dictionary用法




Swift中的有序地圖 (8)

有沒有 內置的 方法在Swift 2中創建有序地圖? 數組 [T] 按對象附加到它的順序排序,但字典 [K : V] 不是有序的。

例如

var myArray: [String] = []
myArray.append("val1")
myArray.append("val2")
myArray.append("val3")

//will always print "val1, val2, val3"
print(myArray)


var myDictionary: [String : String] = [:]
myDictionary["key1"] = "val1"
myDictionary["key2"] = "val2"
myDictionary["key3"] = "val3"

//Will print "[key1: val1, key3: val3, key2: val2]"
//instead of "[key1: val1, key2: val2, key3: val3]"
print(myDictionary)

是否有任何內置方法來創建有序 key : value 以與數組相同的方式排序的 key : value 映射,還是我必須創建自己的類?

如果可能的話,我想避免創建自己的類,因為Swift包含的內容很可能更有效。




只需使用一組元組。 按你喜歡的方式排序。 所有“內置”。

var array = [(name: String, value: String)]()
// add elements
array.sort() { $0.name < $1.name }
// or
array.sort() { $0.0 < $1.0 }

如果您的密鑰確認為Comparable,您可以從未排序的字典創建排序字典,如下所示

let sortedDictionary = unsortedDictionary.sorted() { $0.key > $1.key }

我知道我是參加派對的,但你是否考慮過NSMutableOrderedSet?

https://developer.apple.com/reference/foundation/nsorderedset

當元素的順序很重要時,您可以使用有序集作為數組的替代,並且在測試集合中是否包含對象時的性能是對數組成員資格的考慮測試比測試集合的成員資格要慢。


正如Matt所說,詞典(和集合)是Swift(和Objective-C)中的無序集合。 這是設計的。

如果需要,您可以創建字典鍵的數組,並將其排序為您想要的任何順序,然後使用它從字典中獲取項目。

NSDictionary 有一個方法allKeys,它為您提供數組中字典的所有鍵。 我似乎記得類似於Swift Dictionary對象的東西,但我不確定。 我還在學習Swift的細微差別。

編輯:

對於Swift Dictionaries,它是 someDictionary.keys


這就是我做的,非常簡單:

let array = [
    ["foo": "bar"],
    ["foo": "bar"],
    ["foo": "bar"],
    ["foo": "bar"],
    ["foo": "bar"],
    ["foo": "bar"]
]

// usage
for item in array {
    let key = item.keys.first!
    let value = item.values.first!

    print(key, value)
}

鍵不是唯一的,因為它不是 Dictionary 而是 Array 但您可以使用數組鍵。


    var orderedDictionary = [(key:String, value:String)]()






swift2