swift编程语言中有三种常用的收集类型,分别为:数组Array, 集合Set和字典Dictionary。这三种类型都属于结构体类型,都是以泛型的形势定义的,以var声明一个收集类型的变量对象,那么该对象是以可修改的方式创建的,可以对该对象做添加,修改,删除等操作;以let声明的对象,不能改变它的值,也不能对其做添加,修改,删除等操作。
第一节 数组
数组是一个可以存放相同类型的多个元素对象的有序线性列表,这些元素可以是任意类型,也可以是元组。但是如果在一个数组中出现在了与其他元素类型不同的元素,那么编译器就会报错。
一个数组的完成类型为:Array<Element>。这里的Element表示存放到该数组中元素的类型,还有一种精简的表示法:Array[Element]。
eg:
//声明一个存放整型元素的数组对象array,并对它创建一个空数组
var array = Array<Int>() || var array = [Int]()。
//声明一个Double类型常量数组,创建10个元素,每个元素都是2.0
let a = [Double](repeating: 2.0, count: 10)
不过我们更常用的是直接使用数组的字面量[1,2,3,4,5],这样数组的类型为Int。
//声明一个有4个元素的Double类型数组
let a = [1.0, 2.0, 3.0, 4.0]
swift 中还提供了+操作符,可以把两个数组拼接在一起,组成一个新的数组。
eg:
//将[1, 2, 3] 和 [4, 5, 6]两个数组拼接在一起,组成整型数组a
//a的元素为[1, 2, 3, 4, 5, 6]
let a = [1, 2, 3] + [4, 5, 6]
//变量数组b有三个Bool类型元素,对于变量数组可以使用+=为自己添加新元素,但是必须是和自己相同的类型的数组,不是元素类型对象
var b = [false, true, false]
b+= [true, false]
//b的元素为[false, true, false, true, false]
print("b = \(b)")
数组对象的元素访问:如果访问指定元素,可以通过下标操作符[]来获得,若索引值超出了数组本身大小,那么程序会引发异常
eg:
let a = [1, 2, 3, 4, 5]
// 这里读取数组a的索引0的元素,
// 即第一个元素,并为常量x初始化
let x = a[0]
数组的几个基本操作
count:获取数组个数
isEmpty:判断数组是否为空
contains(:):判断数组是否包含某个元素
append(:):在该变量数组最后面添加元素
insert(_:at:):在该变量数组指定位置添加元素,原本的元素被移动到新元素后面
remove(at:):在该变量数组中移除指定位置的元素
注意:数组字面量(例如:[1,2,3]),本身是一个常量,如果我们对数组字面量进行添加等操作,则会引起编译器报错。
第二节 集合
一个集合也能存放多个相同类型的元素,与数组不同的是:
1:一个集合不允许出现两个相同的元素
2:集合中的元素是无序的
3:并不是所有的类型对象都能作为集合的元素,不过swift的基本类型都可以
一个集合的完整类型为:Set<Element: Hashable>,集合没有精简表示法。
我们可以使用集合的构造方法创建一个空集合,也可以使用数组字面量构建一个集合
eg:
// 我们通过集合的构造方法来构造一个空的集合变量setA,
// setA集合对象的每个元素都是Int类型对象
var setA = Set<Int>()”
// 我们这里还可以通过集合的不定参数个数的构造方法来创建一个含有指定元素 的集合
setA = Set<Int>(arrayLiteral: 1, 2, 3, 4)”
// 这里我们通过数组字面量来创建一个集合常量setB,
// 这里需要对setB显式指定类型
let setB: Set<Float> = [1.0, 0.5, 2.0]
// 我们也可以用空的数组字面量来构造一个空的集合
setA = []”
元素集合的访问不能像数组通过索引值,因为它是无序的,可以通过for-in循环,也可以通过flatMap方法,有选择性的将集合元素取出。
集合的几个基本操作
count:获取集合个数
isEmpty:判断集合是否为空
contains(:):判断集合是否包含某个元素
insert(:at:):在该变量集合指定位置添加元素,如以存在,原本的元素被覆盖,保证唯一性
remove(at:):在该变量集合中移除指定位置的元素
第三节 字典
字典与数组和集合不同,它是以一种键-值对的形式存储元素的,字典中不允许出两个相同的键,但是不同的键可以对应相同的值,字典的元素也是无序的。字典中键的类型与值的类型都是在声明中直接确定的,每个键的类型应该一致,每个值的类型也应该一致,键的类型和值的类型可以相同也可以不同。
字典的完整类型为:Dictionary<Key: Hashable, Value>,这里的key表示键的类型,value表示值的类型,字典也有精简表示法:[key : value].
eg:
//使用字典默认的构造方式创建一个空的字典变量
//键的类型为String,值得类型为Int
var a = Dictionary<String: Int>()
// 通过字典的不定参数个数的构造方法创建一个字典对象,
// 这里通过元组将字典的键值对进行捆绑,
// 元组的第一个元素是键,第二个元素是值。
a = Dictionary<String, Int>(dictionaryLiteral: ("one", 1), ("two", 2), ("three", 3))
//使用精简表示法创建一个空的字典变量
var a = [String : Int]()
对字典的值的访问类似于数组对元素的访问,可以通过下标操作符对字段的值进行访问,例如对于一个这样的字典对象dict[String :Int],我们可以通过dict["String"] 的方式来访问键“String”对应的值,不过这里得到的值是一个Optional对象,因为如果指定的键对应的值不存在,会返回空。
eg:
//声明一个字典常量dict,类型为[String : Int]
let dict = ["one":1, "two":2, "three":3]
//访问键"one" 对应的值,得到1
let one_value = dict["one"]
//这里访问键"four" 对应的值将得到一个空值
字典的几个基本操作
count: 获取字典的键值对元素个数
isEmpty:判断字典是否为空
keys:获取字典对象的所有键值
values:获取字典对象的所有值
updateValue(_:forKey:):更新一个键对应的值
removeValue(forKey:): 将指定的键的元素移除
注意:这里的keys和values返回的类型为LazyMapCollection,它与集合类型类似,不能通过下标访问元素,一般通过for-in循环迭代访问;变量字典还能通过调用下标方式来新增一个键值对或修改一个键对应的值。