-
Notifications
You must be signed in to change notification settings - Fork 291
Expand file tree
/
Copy path1.md
More file actions
85 lines (74 loc) · 2.44 KB
/
1.md
File metadata and controls
85 lines (74 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<!--
* @Author: shgopher shgopher@gmail.com
* @Date: 2023-04-01 04:27:56
* @LastEditors: shgopher shgopher@gmail.com
* @LastEditTime: 2023-04-05 06:22:04
* @FilePath: /GOFamily/基础/函数方法/1.md
* @Description:
*
* Copyright (c) 2023 by shgopher, All Rights Reserved.
-->
# map-filter-reduce
map filter reduce 这三个操作经常用在数据的处理上,比如数据的统计业务。
下面看一下这三者基本的做法是什么
我们用做饭来进行类比:
- map 30 个进,30 个出,类似于洗菜的过程
- filter 30 个进,15 个出,类似于摘菜
- reduce 15 个进,1 个出,类似于炒菜的过程
下面这个案例,我们要对于一组 string 进行数据处理。map 的过程,我们对这堆 string 进行全部的修饰,filer 过程我们挑选出合适的 string,reduce 过程我们最终输出要的成品
map 的举例
```go
func MapStr(s []string,f func(string)string)[]string{
var newS []string
for _,v := range s{
newS = append(newS,f(v))
}
return newS
}
```
filter 的举例
```go
func FilterStr(s []string,f func(string)bool)[]string{
var newS []string
for _,v := range s{
if f(v){
newS = append(newS,v)
}
}
return newS
}
```
reduce 的举例
```go
func ReduceStr(s []string,f func(string)string)string{
var newS string
for _,v := range s{
newS += f(v)
}
return newS
}
```
```go
func main() {
s := []string{"李明月", "李月", "百伯", "张兰", "武滴滴", "叶赫那拉", "迪丽热巴"}
ns := MapStr(s, func(v string) string {
return v + "同学"
})
fmt.Println(ns)
ns = FilterStr(ns, func(v string) bool {
return len([]rune(v)) > 4
})
fmt.Println(ns)
sum := ReduceStr(ns, func(v string) string {
return v + "-"
})
fmt.Println(sum)
}
```
这段代码的意思就是首先,我们有一堆学生的名字,我们在名字后面先加上同学,然后我们要把名字本身大于两个字的同学挑出来,并且把他们组成一句话。
```go
map :[李明月同学 李月同学 百伯同学 张兰同学 武滴滴同学 叶赫那拉同学 迪丽热巴同学]
filter :[李明月同学 武滴滴同学 叶赫那拉同学 迪丽热巴同学]
reduce :李明月同学-武滴滴同学-叶赫那拉同学-迪丽热巴同学-
```
通过这个案例我们发现,map-filter-reduce 本身只是控制逻辑,真正的业务逻辑其实是那个函数类型,所以说 map-filter reduce 也是标准的 `控制代码-业务代码` 分离设计