创建一个数组
字面量创建
- 可以使用数组字面量来初始化一个数组,它是一种以数组集合来写一个或者多个值得简写方式。数组字面量写做一系列的值,用逗号分隔,用方括号括起来
字面量创建空数组
- 创建空数组的时候必须携带类型信息
- 如果内容已经提供了类型信息,比如说作为函数的实际参数或者已经分类了的变量或常量,你可以通过空数组字面量来创建一个空数组
初始化器
- 使用初始化器有两种方式
- [类型]()
- Array<类型>()
初始化器参数
- init(repeating repeatedValue:Element, count:Int)
- init(arrayLiteral elements:Element...)
- init<S>(_ elements: S) where S: Sequence, Self.Element == S.Element
- init(from decoder: Decoder) throws
let chars = Array("hello")
print(chars)
//["h", "e", "l", "l", "0"]
访问和操作数组:遍历和索引
数组遍历
- For-in
- forEach方法
- 无法使用break或continue跳出或者跳过循环
- 使用ruturn只能退出当前一次循环的执行体
- 同时得到索引和值enumerated()
- 使用Iterator遍历数组
索引
-
startIndex返回第一个元素的位置,对于数组来说,永远都是0
-
endIndex返回最后一个元素索引+1的位置,对于数组来说,等同于count
-
如果数组为空,startIndex等于endIndex
-
indices获取数组的索引区间
访问和操作数组:查找操作
判断是否包含指定元素
- contain(_:)判断数组是否包含指定元素
- contains(where:)判断数组是否包含符合给定条件的元素
判断所有元素符合某个条件
- allSatisfy(_:)判断数组的每一个元素都符合给定的条件
查找元素
- first 返回数组第一个元素(optional),如果数组为空,返回nil
- last返回数组最后一个元素(optional),如果数组为空,返回nil
- first(where:)返回数组第一个符合给定条件的元素(optional)
- last(where:)返回数组最后一个符合给定条件的元素(optional)
查找索引
- firstIndex(of:)返回给定的元素在数组中出现的第一个位置(optional)
- lastIndex(of:)返回给定的元素在数组中出现的最后一个位置(optional)
- firstIndex(where:)返回符合条件的第一个位置(optional)
- lastIndex(where:)返回符合条件的最后一个位置(optional)
查找最大最小元素
- min()返回数组中最小的元素
- max()返回数组中最大的元素
- min(by:)利用给定的方式比较元素并返回数组中的最小元素
- max(by:)利用给定的方式比较元素并返回数组中的最大元素
访问和操作数组:添加和删除
在末尾添加
- append(_:)在末尾添加一个元素
- append(contentsOf:)在末尾添加多个元素
在任意位置插入
- insert(_:at:)在指定的位置插入一个元素
- insert(contentsOf:at:)在指定位置插入多个元素
字符串也是Collection
- 字符串也是Collection,Element是Character类型
移除单个元素
- remove(at:)移除并返回指定位置的一个元素
- removeFirst()移除并返回数组的第一个元素
- popFirsh()移除并返回数组的第一个元素(optional),数组为空返回nil
移除多个元素
- removeFirst(:)移除数组前面多个元素
- removeLast(:)移除数组后面多个元素
- removeSubrange(_:)移除数组中给定返回的元素
- removeAll()移除数组所有元素
- removeAll(keepingCapacity:)移除数组所有元素,保留数组容量
访问和操作数组:ArraySlice
移除多个元素
- ArraySlice 是数组或者其他ArraySlice的一段连续切片,和原数组共享内存
- 当要改变ArraySlice的时候,ArraySlice会copy出来,形成单独内存
- ArraySlice拥有和Array基本完全类似的方法
通过Drop得到ArraySlice
- dropFirst(:)”移除“原数组前面指定个数的元素得到一个ArraySlice
- dropLast(:)“移除”原数组后面指定个数的元素得到一个Arra
- drop(:)“移除”原数组符合指定条件的元素得到一个ArraySlice
通过prefix得到ArraySlice
- prefix()获取数组前面指定个数的元素组成的ArraySlice
- prefix(upTo:)获取数组到指定位置(不包含指定位置)前面的元素组成ArraySlice
- prefix(through:)获取数组到指定位置(包含指定位置)前面的元素组成的ArraySlice
- prefix(while:)获取数组前面符合条件的元素(到第一个不符合条件的元素截止)组成的ArraySlice
通过suffix得到ArraySlice
- suffix()获取数组后面指定个数的元素组成的ArraySlice
- suffix(from:)获取数组从指定位置到结尾(包含指定位置)的元素组成的ArraySlice
通过Range得到ArraySlice
- 可以通过对数组下标指定Range获取ArraySlice,可以使用闭区间、半开半闭区间、单侧区间、甚至可以只使用...来获取整个数组组成的ArraySlice
ArraySlice转为Array
- ArraySlice无法直接赋值给一个Array的常量或变量,需要使用Array(slice)
ArraySlice和原Array相互独立
- ArraySlice和原Array是相互独立的,它们添加删除元素不会影响对方
重排操作
数组元素的随机化 (歌单随机播放)
- shuffle()在原数组上将数组元素打乱,只能作用在数组变量上
- shuffled()返回原数组的随机化数组,可以作用在数组变量和常量上
数组的逆序
- reverse()在原数组上将数组逆序,只能作用在数组变量上
- reversed()返回原数组的逆序“集合表示”,可以作用在数组变量和常量上,该方法不会分配新内存空间
数组的分组
- partition(by belongsInSecondPartition:(Element)throws -> Bool)将数组以某个条件分组,数组前半部分都是不符合条件的元素,数组的后半部分都是符合条件的元素
数组的排序
- sort()在原数组上将元素排序,只能作用于数组变量
- sorted()返回原数组的排序结果数组,可以作用在数组变量和常量上
交换数组两个元素
- swapAt(_:_:)交换指定位置的两个元素
拼接操作
字符串数组拼接
- joined()拼接字符串数组里的所有元素为一个字符串
- joined(separator:)以给定的分隔符拼接字符串数组里的所有元素为一个字符串
元素为Sequence数组的拼接
- joined()拼接数组里的所有元素为一个更大的Sequence
- joined(separator:)以给定的分隔符拼接数组里的所有元素为一个更大的Sequence
网友评论