相当于Python';s列表理解
我在玩围棋,但我很难用其他语言做一些非常简单的事情 我想复制一个类似的语法:相当于Python';s列表理解,python,go,Python,Go,我在玩围棋,但我很难用其他语言做一些非常简单的事情 我想复制一个类似的语法: array = [a for a in anotherArray if (some condition)] 围棋中的优雅方式是什么?我真的很想简化我的代码,尤其是在数组上使用函数时。例如: min = min(abs(a[i], b[j]) for i in range(n) for j in range(i, n)) 非常感谢有趣的是,刚刚(18小时前)提出了
array = [a for a in anotherArray if (some condition)]
围棋中的优雅方式是什么?我真的很想简化我的代码,尤其是在数组上使用函数时。例如:
min = min(abs(a[i], b[j]) for i in range(n)
for j in range(i, n))
非常感谢有趣的是,刚刚(18小时前)提出了一个图书馆,它可以满足您的需求:
看
:
正如所指出的,各国:
包filter
包含用于通过过滤器函数的分布式应用程序过滤切片的实用程序函数
这个软件包是一个实验,目的是看看用围棋写这样的东西有多容易。这很简单,但是for
循环同样简单,效率也更高
您不应使用此软件包。
这一警告反映在文件“”第“”节中:
这些是常见的,如map
,reduce
(fold
),过滤器
,zip
等
案例:类型安全数据转换:
map
,fold
,zip
使用仿制药的优点:表示数据转换的简明方法 使用泛型的缺点:
最快的解决方案需要考虑应用这些转换的时间和顺序,以及每个步骤生成的数据量。
对于初学者来说,它更难阅读 替代解决方案: 将
用于
循环和常用的语言结构
如果您看到的确实是python列表理解,那么go-AFAIK中就没有这样的语法等价物 方法是创建一个函数,该函数获取一个切片和一个函数(用于测试条件)并返回一个新切片 编辑:
看起来围棋中已经有这样一个功能了。cf VonC我认为您要查找的术语是python列表
理解
第二个示例在python中不起作用:abs使用1个参数,而不是2个参数。我倾向于同意Pike的自述——使用for
。可能永远,但肯定现在,Go是一种支持直线代码的命令式语言。不管有多少人希望,这种语言可能不会改变以使其他方法更简单。这个软件包的要点是(在收到投诉后),如果你觉得你真的需要它,你可以用它来反映你的想法,而不是他认为你应该这么做。@TwoTwo是的,我想,“for
”,再加上一些“go generate
”就足够了。注意突出的“你不应该使用这个软件包”在Not in Go(只是GitHub上的一个普通库),文档建议您不要使用它;这只是一个实验,证明如果你愿意,你可以做到。
// Choose takes a slice of type []T and a function of type func(T) bool. (If
// the input conditions are not satisfied, Choose panics.) It returns a newly
// allocated slice containing only those elements of the input slice that
// satisfy the function.
func TestChoose(t *testing.T) {
a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
expect := []int{2, 4, 6, 8}
result := Choose(a, isEven)