专栏首页iOSerswift Array map/flatMap/compactMap/filter/reduce/chaining用法小结

swift Array map/flatMap/compactMap/filter/reduce/chaining用法小结

之前特意了解过相关用法,但是时间久了容易忘记,故总结一下,方便回顾。

在playground中测试和注释如下:

import UIKit

let arr = [1,2,3]

//MARK:map(映射):returns an Array containing results of applying a transform to each item.
arr.map { (value) -> Int in
   return value * 2
}

arr.map { (value) -> Int in
    value * 2
}

//闭包写在一行时,执行4次,第一次是闭包赋值操作
arr.map { (value) in value * 2}

let arr1 = arr.map {
    $0 * 2
}

arr.map {$0 * 2}

let arr2 = arr.map {"\($0)"}
print(arr2)

let dic = ["point1" : 10, "point2" : 20, "point3" : 30]
dic.map { (name,distance) -> Int in//参数是元组
    distance * 2
}
dic.map {$0.1 * 2}

//MARK:filter:returns an Array containing only those items that match an include condition.
let arrF0 = arr.filter { (num) -> Bool in
    num % 2 == 0
}

let arrF1 = arr.filter { $0 % 2 == 0 }
print(arrF1)

//MARK:reduce(归纳):初始值+闭包("+"操作符本质也是闭包)。returns a single value calculated by calling a combine closure for each item with an initial value.
let sum = arr.reduce(10) {Result,num -> Int in
    Result + num
}
let sum1 = arr.reduce(10,+)

let dicR0 = dic.reduce("res:") { (Result, arg1) -> String in
    let (key, value) = arg1
    return Result + key + "\(value)" + ","
}

let dicR1 = dic.reduce("res:") { (Result, arg1) -> String in
    let (key, value) = arg1
    return key + "\(value)" + "!"
}

let arrStr = ["你", "好", "啊"]
let dicRStr0 = arrStr.reduce("归纳:"){res, str in res + str}
let dicRStr1 = arrStr.reduce("归纳:", +)

//MARK:flatMap(压平):二维数组降维成一维;可选值转换为可选值
let arrWithArr = [[1, 2], [3, 4, 5], [6, 7]]
let arrFm = arrWithArr.flatMap{$0}
print(arrFm)

let num: Int? = Int(8);
let numFM = num.flatMap{$0 < 5 ? $0 : nil}

//MARK:compactMap(紧凑):去 nil+变非可选
let arrWithNil: [String?] = ["1", nil, "2", nil]

//'flatMap' is deprecated: Please use compactMap(_:) for the case where closure returns an optional value
//arrWithNil.flatMap{$0}

let arrCm = arrWithNil.compactMap{$0}
print(arrCm)
 
//MARK:chaining(链式语法)
let resCh = arrWithArr.flatMap{$0}.filter{$0 > 5}.reduce(10, +)
print(resCh)

链接:swiftArrayMapAndso.playground

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 37.Swift学习之高阶函数

    闭包是 Swift 中一个重要的知识点,不仅在开发中能够帮助解决很多问题(如逆向传值),而且在许多官方系统库方法中都能看到它的身影,尤其是在集合中提供了很多高阶...

    YungFan
  • Swift编程小技巧

    Swift中有很多有用的小技巧,用好了能使代码更加安全,简洁,易于理解或效率更加高效,在这记录一些编写swifty code的小技巧。

    韦弦zhy
  • Swift:map(), flatMap() 和 compactMap() 的区别

    这将获取数组中的每个值并通过我们的闭包运行,其中$0表示当前获取到的数字。因此,它将是1 * 2、2 * 2、3 * 2,依此类推 -map()将从其容器中取出...

    韦弦zhy
  • swift Array map/flatmap/compactmap/filter/reduce/chaining用法小结

    woopDast1
  • map compactMap flatMap

    昨天说要输xpath语法,但是呢今天在公司被折腾了一天没有找到好的题材和做完好的技术储备,于是呢这会结合官方文档拿些小知识点来做个今天的总结……

    大话swift
  • 10个惊艳的Swift单行代码

    几年前,一篇表述“10个Scala函数式单行代码”的文章非常受欢迎,并且随后立马出现了其他的语言版本,例如Haskell版本,Ruby版本,Groovy版本,C...

    哲洛不闹
  • Swift| 基础语法(三)

    总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多...

    進无尽
  • Hacking with iOS: SwiftUI Edition - 里程碑:项目 16 - 18

    最近我们进行了一些非常漫长的项目,但这主要是由于您的SwiftUI技能真正得到了增长——您现在已经超出了基础知识,因此您能够解决更大的项目来解决更大的问题。我意...

    韦弦zhy
  • 通过Swift学函数式编程

    在文章SWIFT IS A LOT LIKE SCALA [1] 提到Swift和Scala有很大的相似之处,在某些特性甚至比Scala对函数式编程的支持更友好...

    刘笑江

扫码关注云+社区

领取腾讯云代金券