数组是我们在编程过程中最常用到的一种数据结构,swift中的Array与oc中的NSArray相比,NSArray只能存储对象,像是Int就不能直接存在NSArray中,而Array可以存储任意类型,虽然就目前为止Array提供的功能还没有NSArray全面强大,但swift强大的类型推断特性,给Array数组的操作带来很大的简化,今天写一下swift中关于Array数组操作的三个高级函数:map、filter、reduce。当作自己的学习笔记
对于数组的处理,如果想要对数组中的所有元素进行统一的处理,你会想到什么方法,对数组进行遍历,然后再进行相应的操作处理,之前我也会直接就这样做,但swift提供了三个关于数组操作的三个高级操作,用这三个函数去处理数组,会使得自己的代码逼格很高,而且非常简便,并且在数据量很大的情况下,也很提高执行的速度。
(一)map
它是用于将数组中每一个元素进行统一的类型转换处理,返回的是一个新的数组
一个例子就可以让大家很直观的了解它的用法:
let numbers = [3, 1, 5, 6, 10, 9]
现要将一个数组(存储int)每个元素变成字符串并且后面拼接一个“+”号,这样我们就可以用map进行处理
let newArr = numbers.map {"\($0)+"}
在swift中可以用$0来代替闭包中的参数,第一个参数为$0,第二个为$2,以此类推,所以这里面$0可以理解为numbers中的每一个元素值。
简单的一行代码就完成了需求,很简单,只要大家知道了有着冲处理方法,很快就能熟练运用。
(二)Filter
这是用于对数组中的元素进行筛选的,返回的也是一个新的数组
同样完成一个例子:将上面的numbers数组选出其中大于5的数
let newArr = numbers.filter {$0 > 5}
(三)Reduce
reduce是把数组中的每一个元素合成一个元素的处理,返回值是一个值类型
一个例子了解他的用法:计算numbers数组的所有元素的和
let number1 = numbers.reduce(0, {$0 + $1})
其中0是初始值,$0为计算结果值,$1为数组元素值
也可以运用reduce处理数组中每一个元素的乘积
let number2 = numbers.reduce(1, {$0 * $1})
与算总和不同的是这里面的初始值是1
这样三个关于Array操作的函数就介绍完了,在合适的场景下运用这些高级一点处理方法,会有很好的效果。