左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
175859 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

111 | Go编程模式:Map-Reduce

你好,我是陈皓,网名左耳朵耗子。
这节课,我们来学习一下函数式编程中非常重要的 Map、Reduce、Filter 这三种操作。这三种操作可以让我们轻松灵活地进行一些数据处理,毕竟,我们的程序大多数情况下都在倒腾数据。尤其是对于一些需要统计的业务场景来说,Map、Reduce、Filter 是非常通用的玩法。
话不多说,我们先来看几个例子。

基本示例

Map 示例

在下面的程序代码中,我写了两个 Map 函数,这两个函数需要两个参数:
一个是字符串数组 [] string,说明需要处理的数据是一个字符串;
另一个是一个函数 func(s string) string 或 func(s string) int。
func MapStrToStr(arr []string, fn func(s string) string) []string {
var newArray = []string{}
for _, it := range arr {
newArray = append(newArray, fn(it))
}
return newArray
}
func MapStrToInt(arr []string, fn func(s string) int) []int {
var newArray = []int{}
for _, it := range arr {
newArray = append(newArray, fn(it))
}
return newArray
}
整个 Map 函数的运行逻辑都很相似,函数体都是在遍历第一个参数的数组,然后,调用第二个参数的函数,把它的值组合成另一个数组返回。
因此,我们就可以这样使用这两个函数:
var list = []string{"Hao", "Chen", "MegaEase"}
x := MapStrToStr(list, func(s string) string {
return strings.ToUpper(s)
})
fmt.Printf("%v\n", x)
//["HAO", "CHEN", "MEGAEASE"]
y := MapStrToInt(list, func(s string) int {
return len(s)
})
fmt.Printf("%v\n", y)
//[3, 4, 8]
可以看到,我们给第一个 MapStrToStr() 传了功能为“转大写”的函数,于是出来的数组就成了全大写的,给MapStrToInt() 传的是计算长度,所以出来的数组是每个字符串的长度。
我们再来看一下 Reduce 和 Filter 的函数是什么样的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 北国骑士
    所以我觉得用go写业务逻辑真的是件很sb的事情
    1
    11
  • 拉欧
    就是因为go最初不支持泛型,所以每个go框架都要搞一堆的代码生成器来生成重复代码,恶心的不要不要的
    1
    2
  • 通俗易懂
    1
  • Refrain
    verifyFuncSignature(fn, elemType, nil) 为什么要传一个空值呢? outType := types[len(types)-1] 这个地方outType必然是空值
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部