分享

NO.186# MAP函数小课堂

 bookstore520 2024-04-06 发布于广东


地 球 不 爆 炸    我 们 不 打 烊

图片            图片

>>>上课啦:


MAP函数能够对源数组中的每个元素应用同一表达式并返回新数组。不但支持链式调用和动态数组,还与其他函数相结合实现复杂数据的转换计算。本期小课堂我们分享学习MAP函数




图片


言之有李:

☆☆ 什么是“映射”???

☆☆ 映射是指两个数组或者两个集合之间元素相互对应的关系。


☆☆ MAP函数的定义???

☆☆ MAP函数:逐个遍历实现映射,即两个非空集合A与B存在着对应关系f,而且对于A中的每一个元素a,B中总有唯一的一个元素b与之对应(MAP函数就是实现非空集合A影射到非空集合B的计算过程)


☆☆ MAP函数的语法?

☆☆ =MAP(Array1,LAMBDA_or_Array<#>)

☆☆ =MAP(数组1,LAMBDA自定义表达式或者数组2LAMBDA自定义表达式或者数组3,……,LAMBDA自定义表达式或者数组n)


☆☆ MAP函数的原理???

☆☆ MAP函数是按照从上到下,从左到右的顺序遍历数组中的每个元素,执行LAMBDA自定义表达式,最后返回和源数组尺寸相同的结果数组。如下图所示


▼MAP函数原理


图片


抛砖引玉:


和BYROW函数和BYCOL函数一样,当第1参数Array源数组为引用时,则MAP函数同样也会保留引用属性。请看如下例题

【例题1】在B列统计每个BOM名称累加出现的次数




图片


小试牛刀:


※ 如果妳能接受编程函数的话,请在B2单元格内编辑函数公式=MAP(A2:A12,LAMBDA(x,COUNTIF(A2:x,x))),ENTER回车


※ 如果妳能接受动态数组的话,请在B2单元格内编辑函数公式=COUNTIF(OFFSET(A2,,,ROW($1:$11)),A2:A12),ENTER回车


庖丁解牛:


我们对=MAP(A2:A12,LAMBDA(x,COUNTIF(A2:x,x)))函数公式进行解析


➽➽ MAP函数的第1参数Array引用数组A2:A12,系统会遍历该数组中的每个元素,执行LAMBDA自定义表达式运算

➽➽ LAMBDA函数的第1参数Parameter指向源数组A2:A12中被系统所遍历的每个元素

➽➽ COUNTIF函数的第1参数Rang是A2:x,表示统计范围;COUNTIF函数的第2参数Criteria是x,表示统计条件

➽➽ 函数公式的计算过程为

第1个遍历的元素为A2,x指向A2,表示COUNTIF函数统计在A2:A2范围内A2出现的次数

第2个遍历的元素为A3,x指向A3,表示COUNTIF函数统计在A2:A3范围内A3出现的次数

    ……

    ……

    ……

第10个遍历的元素为A11,x指向A11,表示COUNTIF函数统计在A2:A11范围内A11出现的次数

第11个遍历的元素为A12,x指向A12,表示COUNTIF函数统计在A2:A12范围内A12出现的次数


抛砖引玉:


MAP函数通常是将计算结果作为内存数组的形式,传递给其他函数。即:它只是一个计算过程,而非最终结果。请看如下例题

【例题2】统计每个人物出现的次数




图片


小试牛刀:


※ 在D1单元格内编辑函数公式

=LET(x,TEXTSPLIT(TEXTJOIN(",",,B2:B11),,","),y,UNIQUE(x),VSTACK({"序号","人物","次数"},HSTACK(SEQUENCE(COUNTA(y)),y,MAP(y,LAMBDA(z,COUNTA(FILTER(x,x=z)))))))

庖丁解牛:


➽➽ LET函数的第1参数和第2参数x,TEXTSPLIT(TEXTJOIN(",",,B2:B11),,","),表示先借助TEXTJOIN函数对人物内容进行拼接,再借助TEXTSPLIT函数对拼接内容进行拆分,后赋值于变量x。如下图所示




图片


➽➽ LET函数的第3参数和第4参数y,UNIQUE(x),表示借助UNIQUE函数对变量x去重并赋值于变量y。如下图所示



图片


➽➽ 借助SEQUENCE函数对变量y构造序列。如下图所示



图片


➽➽ 借助MAP函数对遍历映射的人物出现次数进行汇总。如下图所示




图片


➽➽ 借助HSTACK函数将“序号”、“人物”和“次数”返回结果进行横向堆叠。如下图所示



图片


➽➽ 借助VSTACK函数将“序号”、“人物”和“次数”字段标题进行纵向堆叠。如下图所示




图片


下课啦>>>:


当我们使用BYROW、BYCOL、MAP、MAKEARRAY、REDUCE、SCAN和ISOMITTED等编程类函数时,必须要借助Excel的动态数组功能,一次性返回全部结果。这样可以有效的避免反复调用单元格对象到内存中不至于影响Excel的运行和计算速度!

如果WPS不支持动态数组功能,则强行引入新函数将变得毫无意义!


案例素材

链接: https://pan.baidu.com/s/15gD3O508r0GMzXOg6BOpsA 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多