上一章Swift教程请查看:swift集合set
Swift字典用于存储相同类型值的无序列表,Swift严格执行类型检查,不允许你输入一个错误的类型在字典,即使是错误的。
Swift字典使用唯一标识符作为一个键来存储一个值,以后可以通过相同的键来引用和查找这个值。与数组中的项不同,字典中的项没有指定的顺序,当需要根据标识符查找值时,可以使用字典。
dictionary键可以是整数,也可以是字符串,没有限制,但在dictionary中应该是惟一的。
如果你将创建的dictionary分配给一个变量,那么它总是可变的,这意味着你可以通过添加、删除或更改其项来更改它。但是,如果将字典赋给常量,则该字典是不可变的,其大小和内容不能更改。
创建字典
你可以使用以下初始化语法来创建某个类型的空字典
var someDict = [KeyType: ValueType]()
可以使用以下简单语法创建一个空字典,其键为Int类型,关联的值为字符串
var someDict = [Int: String]()
下面是一个根据给定值集创建字典的例子
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
基于序列的初始化
Swift允许你从数组(键值对)中创建字典。
var cities = [“DDD”,”BBB”,”HHH”]
可以使用以下简单语法创建一个空字典,其键为Int类型,关联的值为字符串
var Distance = [2000,10, 620]
下面是一个根据给定值集创建字典的例子
let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))
以上代码将创建一个以城市为键、以距离为值的字典
过滤字典
Swift允许你过滤字典中的值。
var closeCities = cityDistanceDict.filter { $0.value < 1000 }
如果我们运行上述代码,我们的closeCities字典将是。
["BBB" : 10 , "HHH" : 620]
字典分组
Swift允许你创建字典值的分组。
var cities = ["DDD","BBB","HHH","dddd","bbb"]
你可以使用以下简单的语法,根据第一个字母对dictionary的值进行分组。
var GroupedCities = Dictionary(grouping: cities ) { $0.first! }
访问字典
你可以使用下标语法从字典中检索一个值,即在字典名称之后立即在方括号中传递要检索的值的键,如下所示
var someVar = someDict[key]
让我们检查下面的示例,以便从字典中创建、初始化和访问值
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someVar = someDict[1]
print( " key = 1的值为 \(someVar)" )
print( " key = 2的值为 \(someDict[2])" )
print( " key = 3的值为 \(someDict[3])" )
修改字典
可以使用updateValue(forKey:)方法将现有值添加到字典的给定键,此方法返回字典值类型的可选值,举个简单的例子:
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("New value: ", forKey: 1)
var someVar = someDict[1]
print( "Old value: \(oldVal)" )
print( " key = 1的值为 \(someVar)" )
print( " key = 2的值为 \(someDict[2])" )
print( " key = 3的值为 \(someDict[3])" )
你可以通过如下例所示的在给定键上分配新值来修改字典中的现有元素
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict[1]
someDict[1] = "New value of one"
var someVar = someDict[1]
print( "Old key = 1的值为 \(oldVal)" )
print( " key = 1的值为 \(someVar)" )
print( " key = 2的值为 \(someDict[2])" )
print( " key = 3的值为 \(someDict[3])" )
删除键值对
可以使用removeValueForKey()方法从字典中删除键-值对。如果键-值对存在,则该方法删除该键-值对并返回已删除的值,如果不存在值,则返回nil。举个简单的例子
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var removedValue = someDict.removeValue(forKey: 2)
print( "Key = 1的值为 \(someDict[1])" )
print( "Key = 2的值为 \(someDict[2])" )
print( "Key = 3的值为 \(someDict[3])" )
还可以使用下标语法从字典中删除键-值对,方法是为该键赋值为nil。举个简单的例子
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
someDict[2] = nil
print( "Key = 1的值为 \(someDict[1])" )
print( "Key = 2的值为 \(someDict[2])" )
print( "Key = 3的值为 \(someDict[3])" )
遍历字典
可以使用for-in循环遍历字典中的整个键-值对集,如下面的示例所示
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (index, keyValue) in someDict.enumerated() {
print("字典key \(index) – 字典value \(keyValue)")
}
转换为数组
你可以从给定的字典中提取键-值对的列表,以为键和值构建单独的数组。举个例子:
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)
print("打印字典关键字")
for (key) in dictKeys {
print("\(key)")
}
print("打印字典的值")
for (value) in dictValues {
print("\(value)")
}
字典的count属性
你可以使用字典的只读计数属性来查找字典中的项数,如下所示
var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
print("someDict1项数 = \(someDict1.count)")
print("someDict2项数 = \(someDict2.count)")
字典的empty属性
你可以使用字典的只读空属性来确定字典是否为空,如下所示
var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
var someDict3:[Int:String] = [Int:String]()
print("someDict1 = \(someDict1.isEmpty)")
print("someDict2 = \(someDict2.isEmpty)")
print("someDict3 = \(someDict3.isEmpty)")