go 组合函数 Collection
我们经常需要程序在数据集上执行操作,比如选择满足给定条件的所有项,或者将所有的项通过一个自定义函数映射到一个新的集合上。
在某些语言中,会习惯使用泛型。 Go 不支持泛型,在 Go 中,当你的程序或者数据类型需要 时,通常是通过组合的方式来提供操作函数。
这是一些 strings
切片的组合函数示例。你可以使用这些例子来构建自己的函数。注意有时候,直接使用内联组合操作代码会更清晰,而不是创建并调用一个帮助函数。
collection-functions.go
package main
import "strings"
import "fmt"
// 返回目标字符串 `t` 出现的的第一个索引位置,
// 或者在没有匹配值时返回 -1。
func Index(vs []string, t string) int {
for i, v := range vs {
if v == t {
return i
}
}
return -1
}
// 如果目标字符串 `t` 在这个切片中则返回 `true`。
func Include(vs []string, t string) bool {
return Index(vs, t) >= 0
}
// 如果这些切片中的字符串有一个满足条件 `f` 则返回 `true`。
func Any(vs []string, f func(string) bool) bool {
for _, v := range vs {
if f(v) {
return true
}
}
return false
}
// 如果切片中的所有字符串都满足条件 `f` 则返回 `true`。
func All(vs []string, f func(string) bool) bool {
for _, v := range vs {
if !f(v) {
return false
}
}
return true
}
// 返回一个包含所有切片中满足条件 `f` 的字符串的新切片。
func Filter(vs []string, f func(string) bool) []string {
vsf := make([]string, 0)
for _, v := range vs {
if f(v) {
vsf = append(vsf, v)
}
}
return vsf
}
// 返回一个对原始切片中所有字符串执行函数 `f` 后的新切片。
func Map(vs []string, f func(string) string) []string {
vsm := make([]string, len(vs))
for i, v := range vs {
vsm[i] = f(v)
}
return vsm
}
func main() {
// 这里试试这些组合函数。
var strs = []string{"peach", "apple", "pear", "plum"}
fmt.Println(Index(strs, "pear"))
fmt.Println(Include(strs, "grape"))
fmt.Println(Any(strs, func(v string) bool {
return strings.HasPrefix(v, "p")
}))
fmt.Println(All(strs, func(v string) bool {
return strings.HasPrefix(v, "p")
}))
fmt.Println(Filter(strs, func(v string) bool {
return strings.Contains(v, "e")
}))
// 上面的例子都是用的匿名函数,但是你也可以使用类型正确的命名函数
fmt.Println(Map(strs, strings.ToUpper))
}
运行:
go run collection-functions.go
2
false
true
false
[peach apple pear]
[PEACH APPLE PEAR PLUM]
go 组合函数 Collection的更多相关文章
- javascript柯里化及组合函数~
大家是不是看我上篇博文有点蒙.用的的curry和compose是什么鬼,怎么那么神奇.上篇博文也是主要用到了这两个函数.那今天我们来聊一下curry和compose,这两个东西是函数式编程很重要的东西 ...
- js的组合函数
1.组合函数即由若干个函数组合成一个新的函数,同时完成数据的传递 1>最简单版本 这种方法实现的组合函数,需要我们指定函数的执行顺序 /**第一种方法 */ function add(a, b) ...
- oracle 子查询和组合函数
oracle 子查询和组合函数 --查询与"SCOTT"在同一个部门的员工 select empno,ename,deptno from emp where deptno in ( ...
- go结构体组合函数
结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数 ...
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
- lambda高级进阶--组合函数
只有一个参数的函数可以将一个值转换成另一个值,如果你有2个这样的转换函数,那么在进行一个转换之后在进行第二个转换,其实也是一个中转换. 说到这里,先说一下我个人的一个习惯,我在写javaBean的se ...
- implode() 数组元素组合函数
定义和用法 implode() 函数把数组元素组合为一个字符串. 语法:implode(separator,array); 说明 虽然 separator 参数是可选的.但是为了向后兼容,推荐您使用使 ...
- JavaScript-原型&原型链&原型继承&组合函数
小小的芝麻之旅: 今天学习了js的原型,要说原型,我们先简单说一下函数创建过程. 原型 每个函数在创建的时候js都自动添加了prototype属性,这就是函数的原型,原型就是函数的一个属性,类似一个指 ...
- python自带的排列组合函数
需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...
- python内置函数-排列组合函数
product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...
随机推荐
- 零基础IM开发入门(三):什么是IM系统的可靠性?
本文编写时引用了"聊聊IM系统的即时性和可靠性"一文的部分内容和图片,感谢原作者. 1.引言 上一篇<零基础IM开发入门(二):什么是IM系统的实时性?>讲到了IM系统 ...
- IM开发者的零基础通信技术入门(十):零基础,史上最强5G技术扫盲
本文引用了"鲜枣课堂"的<史上最强5G科普>文章内容.为了更好的内容呈现,在引用和收录时内容有改动,转载时请注明原文来源. 1.内容概述 ➊ 5G技术的关注度越来越高: ...
- Kubernetes系列(三) - 通过Kubeadm部署kubernetes
目录 1. Kubeadm简介 2. 本次操作的机器配置 3. 部署步骤 3.1 准备工作 3.2 安装docker 3.3 安装kubeadm, kubectl, kubelet 3.4 maste ...
- 变分推断(VI)、随机梯度变分推断(SGVI/SGVB)、变分自编码器(VAE)串讲
参考资料: VI参考:PRML Chapter 10. SGVI原文:Auto-Encoding Variational Bayes -- Kingma. VAE参考1:Tutorial on Var ...
- 让element的el-dialog居中显示
我发现element的弹窗偏上,有点不太美观,所以就让它居中显示,直接更改css样式就可以 /deep/.el-dialog__wrapper { text-align: center; white- ...
- SpringBoot集成MinIO8.3.x 依赖冲突解决,至简之招覆盖spring-boot-dependencies的依赖版本声明
版本声明 SpringBoot 2.6.5 MinIO 8.3.7 报错信息 An attempt was made to call a method that does not exist. The ...
- C#中如何使用异步编程
在 C# 中,异步编程主要通过 async 和 await 关键字来实现.异步编程的目的是让程序在执行耗时操作(如 I/O 操作.网络请求等)时不会阻塞主线程,从而提高程序的性能. 1. 异步编程的核 ...
- cpa-公司战略与风险管理
1.战略与战略管理 2.战略分析 3.战略选择 4.战略实战 5.公司治理 6.风险与风险管理
- Golang-函数5
http://c.biancheng.net/golang/func/ Go语言函数(Go语言func) 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列 ...
- Redis的分布式锁详解
Redis实现的分布式锁 # 对资源key加锁,key不存在时创建,并且设置,10秒自动过期 SET key value EX 10 NX # 删除key DEL key NX的作用 NX参数是为了保 ...