集合类型的介绍
Swift中提供三种集合类型:数组(Arrays)、集合(Sets)和字典(Dictionaries)来存储集合类型数据。
- 数组(Arrays):是有序数据的集合。
- 集合(Sets):是无序无重复的集合。
- 字典(Dictionaries)是无序的键值对的集合。
Swift是安全性极高的语言,所以要求集合中存储的数据值类型必须明确,也就是不能将不正确的数据类型插入其中,同时也保证了我们在取值时的正确性。
数组(Arrays)
数组是一串有序的由相同类型元素构成的集合。
数组中的集合元素是有序的,可以重复出现。
Swift中的数组类型为Array,是一个泛型集合。
-
数组的初始化
定义数组://定义不可变数组
let array = ["tom","jake","rose"]
//定义可变数组
//define 1
var arrayM = Array<String>()
//define 2
var arrayMutable = String
* 可变数组的基本操作
//定义数组
var arrayM = String
//添加元素
arrayM.append("rose")
arrayM.append("jake")
arrayM.append("jim")
//结果:["rose","jake","jim"]
//插值
arrayM.insert("paul",at:0)
//结果: ["paul","rose","jake","jim"]
//删除元素 Swift2.x中的写法,Swift3.0中已经废弃
//arrayM.removeAtIndex(0)
//Swift3.0中写法:
arrayM.remove(at: 0)
//结果:["rose","jake","jim"]
//删除元素
arrayM.remove(at:0)
//结果:["jake","jim"]
//修改元素
arrayM[0] = "tom"
//结果:["tom","jim"]
//取出某个元素
arrayM[1]
//结果:"jim"
* 数组的遍历
```
//定义数组
var flowerArray = ["violet","blue enchantress",
"purple rose","black rose"]
//根据下标遍历
for i in 0..<flowerArray.count {
print(flowerArray[i])
}
//直接遍历
for flowerName in flowerArray {
print(flowerName)
}
//区间遍历
for flowerName in flowerArray[0...3]{
print(flowerName)
}
//值和索引遍历
for (index, value) in flowerArray.enumerated(){
print("item\(String(index + 1)):\(value)")
}
//结果:
//item1:violet
//item2:blue enchantress
//item3:purple rose
//item4:black rose
```
* 数组的合并
//定义数组
var nameArray = ["rose", "jake", "tom"]
let animalArray = ["dog", "cat", "pig"]
//数组合并
let resultArray = nameArray + animalArray
//结果:["rose", "jake", "tom", "dog", "cat", "pig"]
nameArray += ["panda"]
//结果:["rose", "jake", "tom", "panda"]
注意:数组类型不一致的情况下不能相加合并!
**集合(Sets)**
集合用来存储相同类型并且没有确定顺序的不同值。
* 集合(Sets)的初始化
//初始化
var defineName = Set<String>()
var musicName: Set = ["告白气球","刚好遇见你"]
* 集合(Sets)基本操作
//插值
var musicName: Set = ["see you again"]
musicName.insert("丫头")
//结果:["see you again", "丫头"]
//删除
musicName.remove("see you again")
//结果(Sets中剩余的元素):["丫头"]
//注意:删除元素时,如果Sets中不包含要删除的元素时,返回值为nil,Sets元素不变。
//是否存在某元素
if musicName.contains("丫头"){
print("Yes!")
}
//结果:Yes!
//利用两个集合存在交集生成新的集合
var oldNum: Set = [0, 2, 1, 3]
let newNum: Set = [3, 2, 4]
let subNum: Set = [3, 2]
oldNum.intersection(newNum).sorted()
//结果:[2, 3]
//利用两个集合取出交集元素的元素生成新的集合
oldNum.symmetricDifference(newNum).sorted()
//结果:[0, 1, 4]
//根据两个集合的元素生成新的集合
oldNum.union(newNum).sorted()
//结果:[0, 1, 2, 3, 4]
//根据不在子集内的元素生成新的集合
oldNum.subtracting(subNum).sorted()
//结果:[0, 1]
* 集合(Sets)的遍历
let character:Set = ["a", "b", "c"]
for c in character{
print(c)
}
//结果:
// "c"
// "a"
// "b"
//顺序遍历集合(Sets)
for c in character.sorted(){
print(c)
}
//结果:
// "a"
// "b"
// "c"
//此集合的元素排列顺序由操作符"<"对元素进行比较的结果来确定。
* 集合之间的关系
* 利用运算符`==`来判断两个集合包含的元素是否完全相同
* 使用`isSubset(of:)`方法来判断一个集合是否为另一个集合的子集
* 使用`isSuperset(of:)`方法来判断一个集合是否包含另一个集合
* 使用`isStrictSubset(of:)`或`isStrictSuperset(of:)`方法来判断一个集合是否是另一个集合的子集或者父集并且两个集合并不相等
* 使用`isDisjoint(with:)`方法来判断两个集合是否无交集
```
let num1: Set = [0, 1, 2, 3, 4]
let num2: Set = [3, 4]
let num3: Set = [5, 6]
if num2.isSubset(of:num1) {
print("true")
}
//结果:true
if num1.isSuperset(of:num2){
print("true")
}
//结果:true
if num1.isDisjoint(with:num3) {
print("true")
}
//结果:true
```
**字典**
* 字典介绍
* 字典允许按照某个键值来访问元素
* 字典是有两部分集合组成的,键(key)集合与值(value)集合
* 键集合元素是不能重复的,值集合的元素是可以重复的
* Swift中的字典
* 类型为Dictionary,也是泛型集合
* 字典初始化
let addressD = ["city":"shenyang", "country": "china"]
var customD = Dictionary<Int, String>()
* 字典的基本操作
var timeD = Dictionary<String, Int>()
//添加元素
timeD["day"] = 03
timeD["month"] = 03
timeD["year"] = 2017
//结果:["month": 03, "year": 2017, "day": 03]
//删除元素
timeD.removeValue(forKey: "year")
//结果:["month": 03, "day": 03]
//修改元素
timeD["month"] = 05
//结果:["day": 03, "month": 05]
//此种写法,如果字典中存在此键,则将此键对应的值修改,如果不存在此键,则添加此键值对。
//更新键值
timeD.updateValue(05, forKey: "day")
//结果:["day": 05, "month": 05]
* 字典的遍历
可以利用`for-in`来遍历字典中的键值对,每个字典的数据项都以(key, value)元组形式返回。
for (timeKey, timeValue) in timeD {
print("(timeKey): (timeValue)")
}
//结果:
//day: 05
//month: 05
遍历字典的键集合或者值集合
for timeKey in timeD.keys {
print("(timeKey)")
}
//结果:
//month
//day
Zeb