Swift --棒棒糖2--filter,map,compactMap,reduce,sort高阶函数

这篇博客深入探讨了Swift编程中的几个关键高阶函数,包括filter、map、compactMap和reduce。通过实例解析,展示了如何利用这些函数简化代码,提高效率,实现数据处理的简洁与流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入代码片Swift提供了很多很便捷的高阶函数,避免了使用for循环,创建临时数组等繁琐的手段就能得到你想要的结果,代码看起来简洁明了,行云流水

struct Student {
    var name:String
    var number:Int
    var sex:Float
    var address:String
}


let students = [
            Student(name: "张三", number: 1, sex: 0, address: "北京"),
            Student(name: "李四", number: 2, sex: 1, address: "上海"),
            Student(name: "王五", number: 3, sex: 1, address: "广州"),
            Student(name: "赵六", number: 4, sex: 0, address: "深圳")
        ]

***一:Filter的使用,从原数组中找出满足添加的元素,形成一个新的较之原数组元素变少的的数组***
let name = students.filter { (student) -> Bool in      
            return student.sex == 0
        }
let name1 = students.filter { $0.sex == 0}
print("===\(name)")
print("===\(name1)")

结果:[hello.Student(name: "张三", number: 1, sex: 0.0, address: "北京"), hello.Student(name: "赵六", number: 4, sex: 0.0, address: "深圳")]

***二:Map的使用, 是拿出原数组中元素的某一属性, name或者number或者sex或者address,形成一个与原数组类型完全不一致某类型的集合***
let aa = students.map { $0.name }
print("===\(aa)")

结果:["张三", "李四", "王五", "赵六"]

***三:CompactMap的使用***

let students2 = [
            Student(name: "张三", number: 1, sex: 0, address: "北京"),
            nil,
            Student(name: "李四", number: 2, sex: 1, address: "上海"),
            Student(name: "王五", number: 3, sex: 1, address: "广州"),
            Student(name: "赵六", number: 4, sex: 0, address: "深圳")
        ]
 这个数组较之上面的数组,里面有一个元素为nil

let student2 = students2.compactMap { $0?.name }
print("===\(student2)")

结果:["张三", "李四", "王五", "赵六"],可见它较之于Map可以排空原数组中的空元素后再进行新元素整合形成新的不同于原数组类型的数组。

***四:Reduce的使用*** //reduce取简化之意而非减少

let reduceStudent = students.reduce(10) { (a, student) -> Int in
            return a + student.number
        }
print("=====\(reduceStudent)")

a代表你基于运算前,初始化了一个值10, a 用来存储每一次(相当于for循环)计算的值临时存在a中
a + studentnumber ----- 10 + 1 = 11 
a + studentnumber ----- 11 + 2 = 13
a + studentnumber ----- 13 + 3 = 16
a + studentnumber ----- 16 + 4 = 20
结果:20

***五:sort排序***
        let sortA = students.sorted(by: {a,b in
            a.number < b.number
        })
print("----\(sortA)")
按number从小到大重新排序原数组,原数组类型不变

结果:[hello.Student(name: "张三", number: 1, sex: 0.0, address: "北京"), hello.Student(name: "李四", number: 2, sex: 1.0, address: "上海"), hello.Student(name: "王五", number: 3, sex: 1.0, address: "广州"), hello.Student(name: "赵六", number: 4, sex: 0.0, address: "深圳")]







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值