swift从入门到精通1.2-Array

263 阅读2分钟

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)


上篇文章:swift从入门到精通1.1-String

中篇文章:swift从入门到精通1.2-Array

下篇文章:swift从入门到精通1.3-Dictionary