[转]Swift 数组中 Map,FlatMap,Filter,Reduce的使用

参考文章
Map和FlatMap的主要区别是,flatmap会把两个数组合并为一个,而map不会。
例如:

 func setupMap() {
        let num = [[1,3],[2,4]]
        let res = num.map{
            $0.map{$0 + 2}
        }
        
        let flatRes = num.flatMap{
            $0.map{$0 + 2}
        }
      //  print(res):[[1, 5], [4, 6]]
        //print(flatRes):[1, 5, 4, 6]
    }

Map函数返回数组的元素类型不一定要与原数组相同

    func setupMap1() {
        let num = [[1,3],[2,4]]
        let res = num.map{
            $0.map{event -> Bool in
                let item = event
                if item == 1 {
                    return true
                }else {
                    return false
                }
            }
            
        }
        
        let flatRes = num.flatMap{
            $0.map{event -> Bool in
                let item = event
                if item > 2 {
                    return true
                }else {
                    return false
                }
            }
        }
        
        //print(res):[[true, false], [false, false]]
        //print(flatRes):[false, true, false, true]
    }
    

其它:
filter 可以取出数组中符合条件的元素 重新组成一个新的数组

let numbers = [1,2,3,4,5,6]
let evens = numbers.filter { $0 % 2 == 0 }
// [2, 4, 6]
print(evens)

map,flatMap和filter方法都是通过一个已存在的数组,生成一个新的、经过修改的数组。然而有时候我们需要把所有元素的值合并成一个新的值 那么就用到了Reduce

  1. 比如我们要获得一个数组中所有元素的和
let numbers = [1,2,3,4,5]
// reduce 函数第一个参数是返回值的初始化值
let sum = numbers.reduce(0) { $0 + $1 }
// 这里我写下完整的格式
let sum1 = numbers.reduce(0) { total, num in
    return total + num
}
// 15
print(sum)
  1. 合并成的新值不一定跟原数组中元素的类型相同
let numbers = [1,5,1,8,8,8,8,8,8,8,8]
// reduce 函数第一个参数是返回值的初始化值
let tel = numbers.reduce("") { "($0)" + "($1)" }
// 15188888888
print(tel)

你可能感兴趣的:([转]Swift 数组中 Map,FlatMap,Filter,Reduce的使用)