【Swift】Map、FlatMap、CompactMap、CompactMapValues、Filter、Reduce

告别Link180!在Ansys Mechanical 2020R2中正确启用Cable280绳索单元(附Beta选项开启指南) 本文详细介绍了在Ansys Mechanical 2020R2中启用Cable280绳索单元的全过程,包括Beta选项的开启步骤、建模技巧及高阶应用。Cable280作为专为绳索仿真设计的单元,相比传统的Link180单元,在大变形模拟和计算效率上表现更优,特别适合斜拉桥、电梯牵引绳等工程场景。 阅读详情

【Swift】Map、FlatMap、CompactMap、CompactMapValues、Filter、Reduce

Map

map可以遍历集合并对每个元素进行处理,得到新的Optional元素,添加到新的数组中进行返回,新元素可能为nil。

func testMap() -> () {
        let stringArray = ["123", "234", "345", "456", "abc"]
        var result = stringArray.map(intoInt)
        print(result)
//         [Optional(123), Optional(234), Optional(345), Optional(456), nil]
        result = stringArray.map({string -> Int? in
            return Int(string)
        })
        print(result)
//         [Optional(123), Optional(234), Optional(345), Optional(456), nil]
        // $0代表数组中的每一个元素
        result = stringArray.map{
            return Int($0)
        }
        print(result)
//        [Optional(123), Optional(234), Optional(345), Optional(456), nil]
        result = stringArray.map { (string) in
        Int(string)
        }
        print(result)
//        [Optional(123), Optional(234), Optional(345), Optional(456), nil]
    }
    func intoInt(string: String) -> Int? {
        return Int(string)
    }

compactMap

相对于Map而言,则会将元素解包,并筛除nil

func testCompactMap() -> () {
        let stringArray = ["123", "234", "345", "456", "abc"]
        var result = stringArray.compactMap(intoInt)
        print(result)
        //         [123, 234, 345, 456]
        result = stringArray.compactMap({string -> Int? in
            return Int(string)
        })
        print(result)
        //         [123, 234, 345, 456]
        // $0代表数组中的每一个元素
        result = stringArray.compactMap{
            return Int($0)
        }
        print(result)
        //         [123, 234, 345, 456]
        result = stringArray.compactMap { (string) in
            Int(string)
        }
        print(result)
        //         [123, 234, 345, 456]
    }

compactMapValues

这个是针对于Dictionary的, 将Dictionary中的value进行解包,并将nil过滤掉

    func testCompactMapValues() -> () {
        let dic = ["key1":"123","key2":"abc","key3":nil,nil:"123",]
        var result = dic.compactMap { $0 }
        print(result)
//        [(key: Optional("key3"), value: nil), (key: Optional("key1"), value: Optional("123")), (key: Optional("key2"), value: Optional("abc")), (key: nil, value: Optional("123"))]
        let result1 = dic.compactMapValues { $0 }
        print(result1)
//        [Optional("key2"): "abc", Optional("key1"): "123", nil: "123"]
    }

flatmap

有两种重载:
第一种:

extension SequenceType {
    public func flatMap<S : SequenceType>(transform: (Self.Generator.Element) -> S) 
         -> [S.Generator.Element]
}

闭包参数是(Self.Generator.Element) -> S, S 定义成SequenceType。所以它是接受数组元素,然后输出一个 SequenceType 类型的元素的闭包。但其实,flatMap 的最终返回结果却是 SequenceType 内部元素组成的新的数组,即:[S.Generator.Element]。比如示例中的arr3.flatMap({$0})

第二种:

extension SequenceType {
    public func flatMap<T>(transform: (Self.Generator.Element) -> T?) 
         -> [T]
}

闭包参数是(Self.Generator.Element) -> T?, T 是一个 Optional 的任意类型。而 flatMap 最终返回结果,其实也不是 T? 类型,而是 T? 类型解包之后,不为 .None 的数组:[T]。比如示例中的arr1.flatMap({Int($0)})

所以基本上就是

  • 将结果nil过滤掉
    public func flatMap(_ transform: (Element) throws -> String?) rethrows -> [String]
    注意:4.1之后,若返回的结果是Option,会弹出警告,提示用compactMap代替flatMap了。
  • 若是二维数组,会将二维数组降为一维数组
  • 会将 Option 进行解包
        let arr1 = ["123", "234", "abc"]
        let arr2 = [["123", "234", "345"], ["456", "567", "abc"]]
        let arr3 = [["123", "234", "345"], ["456", "567", "678"]]
        let arr4 = [["123", "234", "345"], ["456", "567", nil]]
        let arr5 = [["123", "234", "345"], ["456", "567", "678"], nil]
        print(arr1.flatMap({Int($0)}))
//[123, 234]
        print(arr2.map({$0.map({Int($0)})}))
//[[Optional(123), Optional(234), Optional(345)], [Optional(456), Optional(567), nil]]
        print(arr2.flatMap({$0.flatMap({Int($0)})}))
//[123, 234, 345, 456, 567]
        print(arr3.flatMap({$0}))
//["123", "234", "345", "456", "567", "678"]
        print(arr4.flatMap({$0}))
//[Optional("123"), Optional("234"), Optional("345"), Optional("456"), Optional("567"), nil]
        print(arr5.flatMap({$0}))
//[["123", "234", "345"], ["456", "567", "678"]]

filter

是将元素进行规则比较,返回Bool值,为true的则返回,返回false的则被筛选掉

        let dic = ["key1":"123","key2":"abc","key3":nil,nil:"123",]
        let arr1 = ["123", "234", "abc"]
        print(dic.filter({$0.value != nil}))
//[Optional("key2"): Optional("abc"), nil: Optional("123"), Optional("key1"): Optional("123")]
        print(arr1.filter({Int($0) != nil}))
//["123", "234"]

reduce

将元素与一个初始值进行计算操作返回结果

        let arr1 = ["123", "234", "abc"]
        print(arr1.reduce("012",{print($0);print($1);return $0+$1}))
//        012
//        123
//        012123
//        234
//        012123234
//        abc
//        012123234abc
YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度 本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图 阅读详情

相关推荐

Python爬取天天基金网历史数据

前言 最近开始学习基金????,感觉需要收集一些数据统计分析才靠谱????毕竟给A股交学费的感觉可不好受???? 网上有很多公开的数据,我这里选择的是天天基金网进行爬取 页面分析 接口我分析过了,有些验证不太好获取数据,所以直接从html提取 在天天基金网中随便选择一款基金,然后点击进入历史数据页面 容易定位出日增长率的css选择器 还有翻页按钮 程序编写 使用selenium打开chrome浏览器进行爬取,全代码如下 from selenium import webdriver from sel

JiajunBernoulli的博客 2949

Swift4.1 新特性compactMap函数

关于compactMap函数 苹果在Swift 4.1中新增compactMap函数,用来代替flatMap函数。 在Swift标准库中compactMap定义如下 public func compactMap&lt;ElementOfResult&gt;(_ transform: (Element) throws -&gt; ElementOfResult?) rethrows -&g...

我只是一个攻城狮 9990

【学习笔记】计算机网络 第八章 无线局域网(WLAN)

计算机网络 第八章 无线局域网(WLAN)

Vera_shsf的博客 1240

Swift 高阶函数详解(forEach、filter、map、flatMap、compactMap、reduce、sorted)

现在这篇关于高阶函数的介绍,它来了。内容主要是介绍 forEach、filter、map、flatMap、compactMap、reduce、sorted等 7 个函数的作用,以及他们的使用方式。本文可以当做字典按需查阅。

Veggie的博客 4380

基于OpenAI Agents构建多智能体工作流:从原理到实战

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个智能体(Agent)的协作与交互,解决单一智能体难以处理的复杂任务。其核心原理在于将任务分解、分配与协调,每个智能体具备特定能力,通过通信机制实现信息共享与决策协同。在工程实践中,多智能体框架的价值在于提升任务处理效率、增强系统鲁棒性,并支持模块化开发。典型的应用场景包括自动化工作流编排、复杂问题求解以及人机协同交互。本文以OpenAI Agents SDK为例,深入探讨如何利用其提供的智能体(Agent)、会话(Ses

weixin_28725959的博客 603

【多目标跟踪】ByteTrack复现(有yolov5例子)

1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML>=5.3 scipy>=1.4.1 tensorboard>=2.2 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 seaborn>=0.11.0 easydic

聿默的博客 1万+

Swift Map详解

Swift Map详解Swift Map详解 Swift Map详解 先看下map的用法 let numbers = [1,2,3,4] let result = numbers.map { $0 + 1 } print(result) // [2,3,4,5] map 方法接受一个闭包作为参数, 然后它会遍历整个 numbers 数组,并对数组中每一个元素执行闭包中定义的操作。 相当于对数组中的所有元素做了一个映射。 比如咱们这个例子里面的闭包是将[1,2,3,4]所有元素都加 1 。 这样它产生的

FTD1120的博客 4184

【华为OD机试真题】6、数组去重和排序 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序

KJ.JK 3887

Swift Map与CompactMap区别

Swift Map与CompactMap区别Map与CompactMap区别flatMap相关Sequence.flatMap区别Optional.flatMap区别Optional.compactMap区别 Map与CompactMap区别 对于不同点,我们先说说相同点: Map和FlatMap都可以用在Optionals和SequenceTypes上(如:数组、字典等)。 对于不同点: 先说说Swift4新加入的新特性compactMap; flatMap会将transform函数的返回类型先拍扁,在组

FTD1120的博客 802

Qt入门教程【数据类型篇】数值类型

Qt中的数值类型

小鱼酱的博客 1万+

基于YOLOv5/v8/v10的垃圾分类识别系统:设计实现与性能优化(附代码+数据集)

做完这个毕设,你已经掌握了从数据准备、模型训练到界面开发的全流程。把模型部署到树莓派上,做个真正的“智能垃圾桶”硬件装置;加入语音提示功能,检测到垃圾后自动语音播报类别;试试融合多个YOLO模型的优势,让分类精度再上一个台阶。按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出很多亮点。要是过程中遇到啥问题,别慌,慢慢琢磨或者咱们一起聊聊,肯定能把这个毕设做成让你满意的作品。

know_F0727的博客 462

深入浅出Swift高阶函数-Map、FlatMap、CompactMap、CompactMapValues、Filter、Reduce

Swift 作为一门新兴的语言,它吸收了众多语言的优点,函数式编程就是其中之一。在 Swift 中,函数是作为一等公民的存在,所以学习高阶函数还是非常有必要的,它可以使你的代码扩展性更高,代码更 Swift 范。废话不多说,下面就让我们开始吧! 初探高阶函数 在 Swift 中,高阶函数一共有下面几个: map:对给定数组每个元素,执行闭包中的映射,将映射结果放置在数组中返回。 flatMap:...

weixin_34239169的博客 2219

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

本文主要介绍了AttributeError: module ‘numpy’ has no attribute 'int’解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 28万+

Swift学习Array学习深入浅出Swift高阶函数-Map、FlatMap、CompactMap、CompactMapValues、Filter、Reduce

Swift 作为一门新兴的语言,它吸收了众多语言的优点,函数式编程就是其中之一。在 Swift 中,函数是作为一等公民的存在,所以学习高阶函数还是非常有必要的,它可以使你的代码扩展性更高,代码更 Swift 范。废话不多说,下面就让我们开始吧! 初探高阶函数 在 Swift 中,高阶函数一共有下面几个: map:对给定数组每个元素,执行闭包中的映射,将映射结果放置在数组中返回。 flatMap:对给定数组的每个元素,执行闭包中的映射,对映射结果进行合并操作,然后将合并操作后的结果放置在数组中返回。

super_man_ww的博客 873

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

iOS_Swift高阶函数

Swift高阶函数理解笔记整理

mikimo的博客 1799

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Swift集合类型操作指南:Map、Filter、Reduce

前言 在OC中操作集合类型往往要使用for - in,但在Swift中,Apple为我们准备了Map、Filter、Reduce等函数,为我们在操作集合类型时候提供了许多便利。 Map、FlatMap Map函数的操作是:使用 map 来遍历集合并对集合中每一个元素进行同样的操作。 这里需要注意的是,Map函数的返回值是一个数组。 现在我们有一个数组 testArr let testArr = [...

weixin_34010566的博客 338

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Swift 4.1 迁移小技巧 —— CompactMap

Swift 4.1 中引入了一个“新”函数 compactMap,在这里给大家介绍一个迁移的小技巧。 compactMap 的由来 在开始之前,先简单介绍一下 compactMap 的由来,我们都知道之前 flatMap 有两个重载版本,第一个是用来 flat 集合的: let arr = [[1, 2, 3], [4, 5]] let newArr = arr.flatMap { $0 } ...

weixin_33755847的博客 409

[Swift 开发] map、flatMap、compactMap的区别

一维数组的使用 let numbers = [1, 2, 3, nil, 4, 5, 6, 7] let maped = numbers.map { $0 } let flatMapped = numbers.flatMap { $0 } let compactMapped = numbers.compactMap { $0 } print(maped) //[Optional(1), Optional(2), Optional(3), nil, Optional(4), Optional(5), Op

u010130947的专栏 1995

Swift之高阶函数map、flatMap、filter、reduce

Swift之高阶函数map、flatMap、filter、reducemapflatMap与map不同之处filerreduce有关Swift.map高阶函数的应用   Swift相比于Objective-C又一个重要的优点,它对函数式编程提供了很好的支持,Swift提供了map、filter、reduce这三个高阶函数作为对容器的支持。 map 解释:可以对数组中的每一个元素做一次处理 var ...

仰望星空的博客 781

Swift之Optional的map与flatMap

区别 flatMap 闭包返回类型为 Optional,可以将非 nil 转为 nil map 闭包返回类型为 非 Optional,不能将 非nil 转为 nil 共同点 当原值为 nil 时返回值肯定为 nil

滴水成川 5372

Swift map、flatMap、compactMap、filer、reduce的使用总结

Swift 提供了map、flatMap、compactMap、filer、reduce这几个高阶函数支持。1,map : 可以对数组中的每一个元素做一次处理// 计算字符串的长度 let stringArray = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"] func stringCount(string: String) -&gt..

我是闰土你是猹的博客 4742

Swift数组的sort、filter、forEach、map等方法,$的使用

swift自动为闭包提供参数名缩写功能,可以直接通过$0和$1等来表示闭包中的第一个第二个参数,并且对应的参数类型会根据函数类型来进行判断。并且in关键字也可以省略,只写函数体就可以了。 例如 arr.sorted { (a, b) in return a &lt; b } 相当于 arr.sorted { $0 &lt; $1 } 1.sort:数组排序 例如 let arr = ...

冰凉的枷锁的博客 5309

Swift 集合类型方法 map、 flatMap、filter

map: 得到一个由闭包里面返回值组成的新序列 flatMap:与map类似,但会过滤掉返回值里面为nil值 filter:得到一个闭包返回值为true的值组成的新序列 var arr = [1,2,3,4,5]                 // 用法: 返回序列里面对遍历的每一个元素操作的结果序列         // 结果:

u010309384的专栏 589

Swift - 高阶函数介绍(map、flatMap、filter、reduce)

Swift 提供了如下几个高阶函数:map、flatMap、filter、reduce。使用高阶函数进行函数式编程不仅可以简化我们的代码,而且当数据比较大的时候,高阶函数会比传统实现更快,因为它可以并行执行(如运行在多核上)。 一、map 函数 1,方法介绍 map 方法获取一个闭包表达式作为其唯一参数。 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值。 简单

mo_xiao_mo的博客 4245

Swift基础 map

map 用法: let numbers = [1,2,3,4] let result = numbers.map { $0 + 1 } print(result) // [2,3,4,5] map 方法接受一个闭包作为参数, 然后它会遍历整个数组,并对数组中每一个元素执行闭包中定义的操作。

乐事派的专栏 629

Swift开发基础08-高阶函数

合集 - Swift(9)1.Swift开发基础07-内存布局07-162.Swift开发基础01-语法2019-06-213.Swift开发基础02-流程控制2019-06-214.Swift开发基础06-闭包07-165.Swift开发基础05-可选项03-016.Swift开发基础04-枚举2019-06-247.Swift开发基础03-函数2019-06-218.SwiftUI01-基本使...

weixin_40685935的博客 705
上一篇: 【算法】Number of Ways to Stay in the Same Place After Some Steps 有多少种移动一定步数后留在原位置的路径
下一篇: Swift面试题录(持续更新ing)
无良剑染
博客等级 码龄11年 3粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值