Array 可以说是在开发中经常遇到的数据结构之一了,Swift 中的 Array 融合了OC中的 Array和Dictionary,使用方法也是灵活多变,个人感觉 Swift 比 OC 多出了那么一点灵性。
从官方文档开始,从最基础的东西做起。
Initializers 初始化
1.1 init()
init()
有这么几种方式
var emptyArray = Array<Int>()
let numbers = Array(1...7)
let namedHues: [String: Int] = ["Vermillion": 18, "Magenta": 302,"Gold": 50, "Cerise": 320]
let fiveZs = Array(repeating: "Z", count: 5)
Instance Variables 实例属性
2.1 capacity
var capacity: Int
数组的容量,容易跟 count
搞混,count
是数组中元素的个数,而 capacity
则为数组能装多少个元素。
Tips: 当数组执行
append
操作的时候,系统会为数组创建一块儿比要添加元素更大的空间,所以capacity
要比count
大。举例如下:
var numbers = [10, 20, 30, 40, 50]
// numbers.count == 5
// numbers.capacity == 5
numbers.append(contentsOf: stride(from: 60, through: 100, by: 10))
// numbers.count == 10
// numbers.capacity == 12
2.2 count
var count: Int
数组中元素的个数
2.3 customMirror
var customMirror: Mirror
数组的反射镜像
2.4 debugDescription 、 description
var debugDescription: String
var description: String
数组和数组中元素的描述
2.5 endIndex
var endIndex: Int
数组结束的位置索引
Tips: 结束的位置要比数组中最后一个元素的位置 > 1
let arr = [1,2,3]
let endIndex = arr.endIndex
// Prints 3
2.6 first
var first: Array<Element>.Iterator.Element?
数组中的第一个元素
2.7 last
var last: Array<Element>.Iterator.Element?
数组中的最后一个元素
2.8 indices
var indices: DefaultRandomAccessIndices<Array<Element>>
数组有效元素的索引
let arr = [1,2,3]
let indices = arr.indices
// Prints 0..<3
2.9 isEmpty
var isEmpty: Bool
数组是否为空
2.10 lazy
var lazy: Array<Element>
返回数组自身
2.11 startIndex
var startIndex: Int
数组的其实位置索引
2.12 underestimatedCount
var underestimatedCount: Int
返回一个小于或等于数组元素个数的值
Instance Methods 实例方法
3.1 append
func append(_:)
在数组的尾部插入元素
func append(contentsOf:)
在数组的尾部插入另一个数组内容
3.2 contains
func contains(element)
数组是否包含某元素
func contains(where:)
数组是否包含符合特定条件的元素
例:
let arr = [1,2,3]
let result = arr.contains(2)
let result2 = arr.contains { (item) -> Bool in
item > 2
}
let result3 = arr.contains { (item) -> Bool in
item > 4
}
// Prints true
// Prints true
// Prints false
3.2 distance
func distance(from:to:)
两个索引之间的距离
3.3 drop
drop 的所有操作均为返回一个新的数组,而不是在原数组上修改(即原数组并无变化)
3.3.1 drop(while:)
func drop(while:)
根绝 while 里的条件判断循环判断数组中的元素,如果返回 true 则删除掉此元素,一旦返回false 则停止循环,返回剩余下元素组成的数组。
例:
var arr = [1,2,3,4,5,2,3]
let result = arr.drop { (item) -> Bool in
return item < 4
}
print(result)
// Prints [4, 5, 2, 3]
3.3.1 dropFirst
func dropFirst()
返回 删除掉第一个元素后组成的数组
3.3.2 dropFirst(_:)
func dropFirst(_:)
返回 删除掉前面N个元素 后组成的数组
3.3.3 dropLast
func dropLast()
返回 删除掉最后一个元素后组成的数组
3.3.4 dropLast(_:)
func dropLast(_:)
返回 删除掉最后N个元素后组成的数组
3.4 elementsEqual
func elementsEqual(_:by:)
与给定的数组的元素是否一样(个数,顺序)
3.5 enumerated
func enumerated()
返回一个由元组(n,x) 组成的数组,n为元素下标,x为元素值
3.6 filter
func filter(_:)
返回 筛选符合条件的元素,组成的新数组
var arr = [1,2,3,4,5,2,3]
let result = arr.filter { $0 % 2 == 0 }
print(result)
// Prints [2, 4, 2]
3.7 first(where:)
func first(where:)
返回第一个满足给定条件的元素
3.8 map 、 flatMap
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
遍历数组,返回处理过的给定类型的元素组成的新数组
var arr = [1,2,3,4,5,2,3]
let result = arr.map { (item) -> Int in
return item - 2
}
print(result)
// Prints [-1, 0, 1, 2, 3, 0, 1]