假设我想对一个列表中的每个元素应用一个函数,然后把得到的值放到另一个列表中,这样我就可以立即使用它们,在python中,我会这样做:
list = [1,2,3]
str = ', '.join(multiply(x, 2) for x in list)
在Go语言中,我是这样做的:
list := []int{1,2,3}
list2 := []int
for _,x := range list {
list2 := append(list2, multiply(x, 2))
}
str := strings.Join(list2, ", ")
有没有可能用更短的方法做这件事?
6条答案
按热度按时间93ze6v8z1#
我会完全照你做的做,做一些调整来纠正错别字
hgb9j2n62#
这是一个老问题,但在我的谷歌搜索中是最热门的,我发现了一些信息,我相信这些信息对OP和其他任何来到这里寻找同样东西的人都有帮助。
有一种更短的方法,尽管你必须自己编写map函数。
在go中,
func
是一个类型,它允许你编写一个函数,该函数接受主题切片和一个函数作为输入,并迭代该切片,应用该函数。请参见Go by Example页面底部附近的
Map
函数:https://gobyexample.com/collection-functions我把它放在这里供参考:
你可以这样称呼它:
所以,是的:您正在寻找的更短的方法是存在的,尽管它没有内置到语言本身中。
2ekbmq323#
既然泛型已经在1.18中引入,我已经创建了一个包含
Map
和Filter
方法的小型实用程序包:)https://pkg.go.dev/github.com/sa-/slicefunk
使用示例
mjqavswn4#
使用go1.18+,你可以编写一个更简洁的通用Map函数:
用法,例如:
x4shl7ld5#
找到了定义通用Map数组函数的方法
x759pob26#
您可以使用lo's Map来快速地将函数应用到所有元素。例如,要乘以2并转换为字符串,您可以用途:
然后,您可以转换回逗号分隔的字符串,如下所示:
strings.Join(l, ",")