1.构造数组
//构造数组
var arr = Array<Int>()
var arr2 = [Any]()
2.初始化数组
//初始化数组
var arr3 = ["开发","测试","生产"]
var arr4 = [String](repeating: "验证", count: 3)
3.添加数据
//添加数据
arr3.append("前端")
arr3 += arr4
//插入数据
arr3.insert("后端", at: 3)
4.修改数据
//修改数据
arr3[0] = "0"
arr3[0...2] = ["9","8","7"]
//交换元素
aar3.swapAt(0, 1)
5.删除数据
//删除数据
arr3 = ["1","2","3","4","5"]
arr3.remove(at: 3) //["1", "2", "3", "5"]
arr3.removeLast() //["1", "2", "3", "4"]
arr3.removeFirst() //["2", "3", "4", "5"]
arr3.removeLast(2) //["1", "2", "3"]
arr3.removeFirst(2) //["3", "4", "5"]
arr3.removeSubrange(Range.init(NSMakeRange(1, 2))!) //["1", "4", "5"]
arr3.removeAll() //删除所有
6.查询数据
arr3 = ["3","1","2","5","4"]
//查询数据
var str1 = arr3.first//获取第一个
str1 = arr3[3] //获取某个
str1 = arr3.last //获取最后一个
str1 = arr3.max() //最大数据
str1 = arr3.min() //最小数据
let has9 = arr3.contains("9") //是否包含这个数据
var index = arr3.startIndex //第一个元素索引 0
index = arr3.endIndex //最后一个元素索引 4+1=5
//用处,获取某个范围内的数据
index = arr3.index(after: 3) //index = 4
7.是否为空
//是否为空
if arr3.isEmpty {
}
8.数组长度
//数组长度
index = arr3.count
9.遍历数组
//遍历数组
for str in arr3 {
print(str)
}
for (index, value) in arr3.enumerated() {
print(index,value)
}
arr3.forEach { (number) in
print(number)
}
let dataArr = ["天", "地", "人"]
for i in 0..<dataArr.count {
print("第\(i + 1)的字是\(dataArr[i])")
}
10.数组转换
//数组转换字符串
let str = arr3.joined(separator: ",")
//字符串转数组
var strArray = str.components(separatedBy: ",")
11.Filter
filter 可以取出数组中符合条件的元素,重新组成一个新的数组。
//filter,刷选数据
var numArr = [3,1,2,5,4]
//找出大于2的数据
var filterArr = numArr.filter { (number) -> Bool in
number > 2
}
//简写:
filterArr = numArr.filter{$0 > 2} //[3,5,4]
12.Map
map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素。闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。
//映射数据map
//让每个数据都乘以2
var mapArr = numArr.map { (number) -> Int in
number * 2
}
//简写
mapArr = numArr.map{$0 * 2}//[6, 2, 4, 10, 8]
13.FlatMap
flatMap返回后的数组中不存在 nil 同时它会把Optional解包;
flatMap还能把数组中存有数组的数组一同打开变成一个新的数组。
//flatMap ,去空,嵌套,解包,字符串,数组,字典等都可以用到
var moreArr = [["A"],["B"],["C"]]
var flatMapArr = moreArr.flatMap{$0} //["A", "B", "C"]
var moreArr2 = ["df","s","df",""]
flatMapArr = moreArr2.flatMap{$0 + "z"} //["A", "B", "C"]
14.compactMap
compactMap返回后的数组中不存在 nil 同时它会把Optional解包。
//compactMap 去空,解包
var nilArr = ["A","B","D",nil]
var compactMapArr = nilArr.compactMap{$0}//["A", "B", "D"]
print(compactMapArr)
15.Reduce
把数组所有元素的值经过闭包运算合并成一个新的值 。首先需要制定一个初始值,并以初始值以提供的运算规则,进行计算。
//reduce 把数组变成一个数值
numArr = [3,1,2,5,4]
//统计和 16 (1 + 15)
var sum = numArr.reduce(1,+)
print(sum)
//乘以3,统计和 45
sum = numArr.map{$0 * 3}.reduce(0,+)
print(sum)
16.lazy
lazy是延迟加载,等用到才进行运算。
let arr = [1, 2, 3]
var arr2 = arr.lazy.map { num -> Int in
print("mapper:\(num)")
return num * 2
}
print(arr2[0])
print(arr2[1])
print(arr2[2])
//打印结果为
// mapper:1
// 2
// mapper:2
// 4
// mapper:3
// 6
17.firstIndex和first
firstIndex会遍历找到匹配第一个元素的位置,也有可能是会nil。
first会遍历找到匹配的第一个元素,就返回这个元素,找不到就返回nil
struct Person {
var name: String
var age : Int
}
let items = [Person(name: "A", age: 12),
Person(name: "B", age: 13),
Person(name: "C", age: 14),]
func getPersonWithName(_ name: String) -> Person? {
return items.firstIndex{ $0.name == name}.map{ items[$0]}
}
func getPersonWithName2(_ name: String) -> Person? {
return items.first{ $0.name == name }
}
print(getPersonWithName("A") as Any)
print(getPersonWithName2("B") as Any)