一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

前言

高阶函数的使用为我们在开发过程中提供了很大的方便,使用起来也很方便,只要用熟了之后确实感觉很好用。

正题

forEach: 遍历

例如:用于修改模型中(符合条件)的值,例如:勾选购物车中的商品,选中的就打钩。

再举一个简单的例子:修改模型中的值

filter:筛选(常用)

struct Student {let id: Stringlet name: Stringlet age: Int
}let student1 = Student(id: "1", name: "student1", age: 11)
let student2 = Student(id: "2", name: "student2", age: 12)
let student3 = Student(id: "3", name: "student3", age: 13)
let students = [student1, student2, student3]//filter
//这个函数就如同单词的意思:查找。将符合条件的元素查找出来放置在数组中返回。比如我们想查找年龄大于18岁的所有学生
let addDucts = students.filter { (student) -> Bool instudent.age >= 12
}
print("addDucts: \(addDucts)")

map:提取+转换(常用)

1.处理数组中的每个元素,并返回⼀个新的结果数组

2.它的作用一般在开发过程中用来转换当前模型,返回一个新的数组。

//map
struct Student {let id: Stringlet name: Stringlet age: Int
}let student1 = Student(id: "1", name: "student1", age: 11)
let student2 = Student(id: "2", name: "student2", age: 12)
let student3 = Student(id: "3", name: "student3", age: 13)
let students = [student1, student2, student3]let intStudents = students.map { student inInt(student.id)
}print("intStudents \(intStudents)")//intStudents [Optional(1), Optional(2), Optional(3)]

map也可以用来处理元素

let num: Int? = 2
let result = num.map {$0 * 2
}print("result: \(result ?? 0)")//result: 4

compactMap:(处理数组)

compactMap是swift4.1的时候推出的Api,把可以说是用来替换flatMap,compactMap使用起来比flatMap更加灵活:

在Swift标准库中compactMap定义如下

public func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

在Swift标准库中flatMap定义如下

public func flatMap(_ transform: (Element) throws -> String?) rethrows -> [String]

从定义可以看出,经过flatMap后一定变成字符串数组,而compactMap是任意类型的数组。从而compactMap使用更加灵活。

用来筛选出符合条件的数据,返回一个新的数组:

例子1:提取

struct Student {let id: Stringlet name: Stringlet age: Int
}let student1 = Student(id: "1", name: "student1", age: 11)
let student2 = Student(id: "2", name: "student2", age: 12)
let student3 = Student(id: "3", name: "student3", age: 13)
let students = [student1, student2, student3]//compactMap  对于 Set 和 Array ,你可以使用 compactMap
let intIds = students.compactMap { (student) inInt(student.id)
}
print("intIds: \(intIds)")//intIds: [1, 2, 3]

例子2:过滤

let nums = [0, nil, 1, nil, 2, nil, 3, nil, 4, nil, 5]
let result = nums.compactMap { (item) -> Int? inreturn item
}
print(result) // [0, 1, 2, 3, 4, 5]

化简的写法:

let result = nums.compactMap { return $0 }
print(result) // [0, 1, 2, 3, 4, 5]

例子3:类型转换

let list = [1, 2, 3, 4, 5]
let newList = list.compactMap { (element) -> String? inreturn "\(element)"
}
print(newList) // ["1", "2", "3", "4", "5"]

化简的写法:

let list = [1, 2, 3, 4, 5]
let newList = list.compactMap {return "\($0)"}
print(newList) // ["1", "2", "3", "4", "5"]

例子4:筛选数据

let list = [28, 54, 36, 62, 44, 33]
let result = list.compactMap { (element) -> Int? inif element%4 == 0 {return element}return nil
}
print(result) // [28, 36, 44]

compactMapValues (处理字典)

let dictionary = ["key1":10, "key2":20, "key3":nil]
let results = dictionary.compactMapValues{ $0 }
print("result: \(results)")//result: ["key2": 20, "key1": 10]

flatMap:映射扁平化(处理完一定返回字符串)

//flatMap
let scoreByName = ["henk":[0,5,8], "john":[2,5,8]]
let mapped = scoreByName.map { $0.value }
print("mapped: \(mapped)")//mapped: [[2, 5, 8], [0, 5, 8]]let flatMapped = scoreByName.flatMap { $0.value}
print("flatMapped: \(flatMapped)")//flatMapped: [2, 5, 8, 0, 5, 8]//map 会直接将元素放在数组中,而 flatMap 会将元素平铺在一个数组中。实际上,s.flatMap(transform) 等同于s.map(transform).joined()。

reduce (组合运算)

struct Student {let id: Stringlet name: Stringlet age: Int
}let student1 = Student(id: "1", name: "student1", age: 11)
let student2 = Student(id: "2", name: "student2", age: 12)
let student3 = Student(id: "3", name: "student3", age: 13)
let students = [student1, student2, student3]//对于 reduce,我们的使用场景就是对数组中的元素进行组合运算,比如我们想计算所有学生的年龄加载一起是多少。
let totalAges = students.reduce(0) { result, student inreturn result + student.age
}
print("totalAges: \(totalAges)")//totalAges: 36

高阶函数的组合使用

例子1:

//将 String 类型映射为 Int 类型,并查找id大于1002的所有学生
let adults = students.compactMap { (stu) inInt(stu.id)}.filter { (id) -> Bool inid > 1
}print(adults) //[2, 3]

例子2:

//计算年龄大于12的所有学生年龄总和
let totalAge = students.filter { (student) -> Bool instudent.age > 11}.reduce(0) { (result, student) inreturn result + student.age
}print(totalAge) // 25

sort() 排序

从小到大排序 改变原来数组的顺序 不会产生新的数组

var list = [6,8,4,0,2,5,3,7,9,1];
list.sort()
print(list)

sorted() 排序

从小到大排序。 不改变原来数组的顺序。 会产生新的数组

var list = [6,8,4,0,2,5,3,7,9,1];
let arr = list.sorted()
print(arr)

sort(by: ) 排序

根据指定的法则 排序。 改变原来数组的顺序。 不会产生新的数组

var list = [6,8,4,0,2,5,3,7,9,1];
//根据指定的法则 排序。  改变原来数组的顺序。   不会产生新的数组
list.sort { num_0, num_1 inreturn num_0 > num_1 ? true : false
}
print(list)

sorted(by: ) 排序

var list = [6,8,4,0,2,5,3,7,9,1];
let arr = list.sorted { num_0, num_1 inreturn num_0 > num_1 ? true : false
}
print(arr)

shuffled 打乱数组

var list = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
list.shuffled()
print(list)

joined 数组转换成字符串拼接在一起

let list = ["1","2","3"];
let title = list.joined(separator: " * ")
print("\(title)")

contains 是否包含

let arr = [1,2,3,4,5]
print("是否包含:\(arr.contains(1))")

prefix() 截取前面

let arr = [1,2,3,4,5]
print("截取前面:\(arr.prefix(2))")//不包含截取的位置

prefix(upTo: ) 截取指定值前面

let arr = [1,2,3,4,5]
print("截取指定值前面:\(arr.prefix(upTo: 3))")//包含截取的位置

suffix() 截取后面面

let arr = [1,2,3,4,5]
print("截取后面面:\(arr.suffix(2))")//不包含截取的位置

suffix(from: ) 截取指定值后面

let arr = [1,2,3,4,5]
print("截取指定值后面:\(arr.suffix(from: 1))")//不包含截取的位置

dropFirst 返回的是除首元素之外的片段

let array = [1,2,3,4]
print(array.dropFirst())//输出[2,3,4]
print(array.dropFirst(2))//输出[3,4]

dropLast 返回的是除尾元素之外的片段

let array = [1,2,3,4]
print(array.dropLast())//输出[1,2,3]
print(array.dropLast(2))//输出[1,2]

joined(separator: " • ") 数组转换字符串

规定是字符串数组

let arr = ["1","2","3","4","5"]
let string = arr.joined(separator: " • ")
print(string)

firstIndex(where: ) 寻找符合条件的元素并返回数组的index

let index = list.firstIndex(where: {$0.age == 20})
print(index ?? 999)

Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...相关推荐

  1. Swift的高阶函数

    Swift的高阶函数 swift常用高阶函数 1. map 2. flatMap 3. filter 4. reduce swift常用高阶函数 swift中比较常用的高阶函数有:map.flatMa ...

  2. Swift 常用高阶函数

    Swift 常用高阶函数 map函数 对每一个元素进行运算 计算每一个元素的count 对元素进行大小写变换 转换类型 sorted函数 从小到大排序 从大到小排序 flatMap函数 降维 过滤元素 ...

  3. python高阶函数filter_python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  4. python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...

    python有很多内置函数,内置函数封装了很多功能,让我们用起来很方便,小猿圈针对高阶函数有详细的讲解视频,朋友们可以去看看,小编学后总结了一下,下面说一下lambda.map和reduce高阶函数的 ...

  5. Python之常用的高阶函数——abs、map、reduce、filter、sorted

    1.abs 简单来说abs的功能就是求一个数的绝对值 例: 特点: <1>函数本身也可以赋值给变量,变量也可以指向函数 <2>传递的参数包括函数名 2.map map()函数接 ...

  6. Javscript 高阶函数(上)

    Javscript 高阶函数(上) filter map reduce reduce 实现compose 什么是compose 面向过程的实现 generator实现 总结 对于ES6的语法的引入,很 ...

  7. Kotlin学习三:高阶函数

    目录 一.高阶函数的基本概念 二.常见高阶函数 1.关于list映射 2.flatMap 3.综合1 4.综合2 三.尾递归优化 四.闭包 五.函数复合 六.科理化 七.偏函数 八.小案例 一.高阶函 ...

  8. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  9. Python函数详解:函数定义、调用,lambda函数,高阶函数map,filter,reduce,函数式编程,模块化设计、代码复用、函数递归、enumerate()

    一.函数 函数是一段具有特定功能的.可重用的语句组,通过函数名来表示和调用. 函数是一段代码的抽象和封装 函数是一段具有特定功能的.可重用的语句组 函数是一种功能的抽象,表达特定功能 两个作用:降低编 ...

最新文章

  1. 2018.10.22-dtoi1443奶牛逃亡(cowrun)
  2. 使用Ubuntu 12.04作为日常电脑环境
  3. 在 asp.net core \ vs2015 update2 情况况下创建 asp.net core web application 的问题
  4. Android --- 刚刚进入 Activity 页面的时候无法打开对话框,报错 Unable to add window -- token null is not valid; is your
  5. c++ createtoolhelp32snapshot取进程路径_Linux进程间通信(上)之管道、消息队列实践
  6. RocketMq namesvr 最佳实践
  7. java getstringbounds_java-AttributedString的FontMetrics.getStringBounds给出...
  8. 基于Token进行身份验证
  9. MySQL优化大总结
  10. C 与 JAVA 的对比分析
  11. mac上实时运行linux系统,使用Darling模拟器实现在Linux上运行Mac OS X程序
  12. python交互式shell之jupyter notebook初步安装使用
  13. Python3爬虫项目集:豆瓣电影排行榜top250
  14. Js 获取浏览器高度
  15. Android截屏工具类的使用
  16. php那好,php那好【货币问答】- php那好所有答案 - 联合货币
  17. php dtu,什么是DTU DTU知识普及基础篇
  18. 第16章 起舞不落幕——与纹理映射的华丽邂逅
  19. 你阳了吗?可以接种最新加强针疫苗了!
  20. 阿丹学理财之房产投资

热门文章

  1. 如何用 Roam Research 备课?
  2. Android:开发中,代码被横线划掉是什么意思
  3. Opencv中的图像相加,相减,相除,相乘(python实现)
  4. 获取Jenkins项目名称
  5. 【操作说明】全能型H.265播放器如何使用
  6. 关于Navicat Premium连接Oracle数据库闪退(失败)的解决办法(带ocl.dll)
  7. PHP 合成图片并在图片上加文字
  8. 100天带你系统入门VR/AR游戏开发,成为5G时代的“头号玩家”
  9. PostgreSQL 各种查询
  10. ftp linux 推送文件_Linux文件传输FTP详解