字典是一种存储同一种类型多条数据的存储器,以 key(键) - value(值) 的形式存在,每个独立的 key 关联一个 value ,键作为字典中的值的标识符。和数组不同,字典是无序的,通过键访问字典。类似于java中的Map
字典在使用时需要明确存储的键和值类型,方法是通过显示的类型声明或者类型推断。
基本语法
[ key 1 : value 1 , key 2 : value 2 , key 3 : value 3 ]
其中 Key 是字典中键的数据类型,Value是字典中对应于键的值的数据类型。
声明字典:
var capitals : Dictionary<String, String> = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"] //显示指定数据类型
var provincialCapital = ["陕西":"西安","甘肃":"兰州","宁夏":"银川"] //根据数据推断其类型
count 属性
和数组一样通过count属性获取字典中元素的数量
var provincialCapital = ["陕西":"西安","甘肃":"兰州","宁夏":"银川"]
var count = provincialCapital.count
print("count is \(count)")
//count is 3
isEmpty属性
和数组一样通过 isEmpty属性来判断字典是否为空
var provincialCapital = ["陕西":"西安","甘肃":"兰州","宁夏":"银川"]
var empty = provincialCapital.isEmpty
print("empty is \(empty)")
//empty is false
基本操作:
1,通过key 来进行增、删、改、查
var capitals : Dictionary<String, String> = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
//增
capitals["英国"] = "伦敦"
print("插入一个键值对之后的字典: \(capitals)")
//删
capitals["韩国"] = nil
print("删除一个键值对之后的字典:\(capitals)")
//改
capitals["朝鲜"] = "不知道哦"
print("修改一个数据之后的字典:\(capitals)")
//查
var china = capitals["中国"]
var usa = capitals["美国"]
print("查询的结果 中国:\(china) ,美国: \(usa)")
//插入一个键值对之后的字典: ["朝鲜": "平壤", "英国": "伦敦", "中国": "北京", "韩国": "汉城"]
//删除一个键值对之后的字典:["朝鲜": "平壤", "英国": "伦敦", "中国": "北京"]
//修改一个数据之后的字典:["朝鲜": "不知道哦", "英国": "伦敦", "中国": "北京"]
//查询的结果 中国:Optional("北京") ,美国: nil
从上面的代码可以看到,增和改的写法一样。两者的区别在于"key"。如果该key在字典中已经从在,则改变原来所对应的值,如果不存在,则新增一个键值对到字典里。
2,使用 updateValue(forKey:)进行 增和改的操作
var capitals : Dictionary<String, String> = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
//增
var value1 = capitals.updateValue("亚丁", forKey: "也门")
print("新增一条数据之后的字典:\(capitals) ,返回的数据 为\(value1)")
//改
var value2 = capitals.updateValue("不知道哦", forKey:"朝鲜")
print("修改一条数据之后的字典:\(capitals) ,返回的数据 为 \(value2)")
//新增一条数据之后的字典:["朝鲜": "平壤", "也门": "亚丁", "中国": "北京", "韩国": "汉城"] ,返回的数据 为nil
//修改一条数据之后的字典:["朝鲜": "不知道哦", "也门": "亚丁", "中国": "北京", "韩国": "汉城"] ,返回的数据 为 Optional("平壤")
updateValue(forKey:) 方法在 forKey 不存在对应值的时候增加值,存在的时候修改对应已存在的值。
新增的时候返回值为 nil ,修改的时候返回值为该 key 所对应的原来的值,是可选类型。
3,使用 removeValueForKey 方法 删除一个值
var capitals : Dictionary<String, String> = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
var value = capitals.removeValueForKey("韩国")
var value1 = capitals.removeValueForKey("美国")
print("移除之后的字典:\(capitals) ,value = \(value),value = \(value1)")
//移除之后的字典:["中国": "北京", "朝鲜": "平壤"] ,value = Optional("汉城"),value = nil
removeValueForKey 方法,当传入的key 在 字典中存在时移除key所对应的值,并且返回该移除的值,为可选类型。如果不存在,则返回 nil。
4,字典的遍历
4.1使用 for-in 循环来遍历字典中的键值对
var capitals = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
for (Country, capital) in capitals {
print("\(Country): \(capital)")
}
//中国: 北京
//韩国: 汉城
//朝鲜: 平壤
4.2 通过访问字典的 keys 或者 values 属性(都是可遍历的集合)遍历字典的键或值
var capitals = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
for country in capitals.keys {
print("\(country)")
}
//中国
//韩国
//朝鲜
for capital in capitals.values{
print("\(capital)")
}
//北京
//汉城
//平壤
4.3将字典的键或者值转为 数组
var capitals = ["中国": "北京", "韩国": "汉城","朝鲜":"平壤"]
var countrys = Array(capitals.keys)
var capital = Array(capitals.values)