【Swift4.0】集合类型-Dictionary
翻译能力有限,如有不对的地方,还请见谅!希望对Swift的学习者有所帮助,使用的编写工具:JQNote InNote(iPhone)
Dictionary是一个字典,存储的是键值对,也是无序的。每一个值对应唯一的key。写作Dictionary, 其中key是Dictionary中一个键的类型,Value是Dictionary中与键对应的存储值的类型。Dictionary简写形式为 [Key : Value]
与集合类型Set类似,Dictionary中的Key类型必须遵守Hashable协议
创建一个空的Dictionary
跟Array一样,你可以使用初始化语法创建一个空Dictionary:
var namesOfIntegers = [Int : String] ()
这个例子创建了一个空的[Int : String]字典类型,它的Key是Int类型,Value是String类型。如果代码上下文已经提供了类型信息,那么可以创建一个空的Dictionary,使用[ : ].
namesOfIntegers[16] = “Sixteen”
namesOfIntegers = [:].
也可以这样创建一个Dictionary:
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
airports声明为一个[String: String]类型的Dictionary,也就是说,它的key是String类型,它的Value也是String类型。
与Array一样,如果初始化值的类型是明确的,那么也可以不用写[String: String]:
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
因为初始化值每一个key都是String,对应每个Value也都是String,Swift会自动推断该Dictionary的类型为[String: String].
获取和修改Dictionary
跟Array一样,你可以使用Dictionary的只读属性count来检查它的存储项数量
print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items.
使用isEmpty属性来判断是否count属性为0
if airports.isEmpty {
print("The airports dictionary is empty.")
} else {
print("The airports dictionary is not empty.")
}
// Prints "The airports dictionary is not empty.”
使用下标索引语法来添加一个合适类型的key以及对应的值,
airports["LHR"] = "London"
或者改变一个值
airports["LHR"] = "London Heathrow” “// the value for "LHR" has been changed to "London Heathrow”
也可以使用updateValue(_:forKey:)方法来更新某个特定key对应的值, 如果不存在,会添加一个,如果存在,则更新。并且返回原来的旧值。
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
print("The old value for DUB was \(oldValue).")
}
// Prints "The old value for DUB was Dublin.”
也可以使用下标索引:
if let airportName = airports["DUB"] {
print("The name of the airport is \(airportName).")
} else {
print("That airport is not in the airports dictionary.")
}
// Prints "The name of the airport is Dublin Airport.”
删除一个键值对:
airports["APL"] = "Apple International"
// "Apple International" is not the real airport for APL, so delete it
airports["APL"] = nil
// APL has now been removed from the dictionary”
或者使用removeValue(forKey:)
if let removedValue = airports.removeValue(forKey: "DUB") {
print("The removed airport's name is \(removedValue).")
} else {
print("The airports dictionary does not contain a value for DUB.")
}
// Prints "The removed airport's name is Dublin Airport.”
遍历Dictionary
可以使用for-in循环来遍历一个Dictionary,每一项返回一个(key,value)元组
for (airportCode, airportName) in airports {
print("\(airportCode): \(airportName)")
}
// YYZ: Toronto Pearson
// LHR: London Heathrow
如果想获取Dictionary中所有的key,或者所有的value,可以使用它的keys和values属性:
let airportCodes = [String](airports.keys)
// airportCodes is ["YYZ", "LHR"]
let airportNames = [String](airports.values)
// airportNames is ["Toronto Pearson", "London Heathrow"]
最后,Dictionary是无序的,如果想有序的遍历一个Dictionary,用sorted()方法在它的keys和values属性。