Go map/reduce/filter/etc的惯用替换

Go map/reduce/filter/etc的惯用替换,go,Go,我有一个围棋项目的清单。我想对它们进行循环,并对其中的一个子集执行一些操作。有没有比下面更优雅/惯用的代码 for key, value := range listOfThings { if(!value.Enabled) { continue; } doTheThing(key, value) } 大背景——我来自于map/reduce/filter/etc是这类事情流行模式的语言,但这些更高级别的抽象并不是一件真正需要做的事情 对于这种代码,在我的

我有一个围棋项目的清单。我想对它们进行循环,并对其中的一个子集执行一些操作。有没有比下面更优雅/惯用的代码

for key, value := range listOfThings {
    if(!value.Enabled) {
        continue;
    }

    doTheThing(key, value)
}
大背景——我来自于map/reduce/filter/etc是这类事情流行模式的语言,但这些更高级别的抽象并不是一件真正需要做的事情

对于这种代码,在我的范围块中是否有比guard/
continue
子句更优雅的语句

我想看看在围棋中实现这种东西有多难, 使用尽可能好的API。这并不难

我几年前就写过,现在还没有机会使用它 这是一次。相反,我只使用“for”循环

你也不应该用它

罗布派克



听从罗布的建议。用于循环。

如果您仍然感兴趣,使用
go funk
包可以进行映射/减少/过滤等操作

此库在答复时定期更新。前面提到的图书馆已经4年没有更新了


我不同意彼得索的说法。如果您想使用golang实现一个查询引擎,比如presto/Athena/hive/impala/sparkSQL,那么您需要创建一个抽象的map/reduce/filter层。如果没有这一点,从select/where这类SQL查询重写术语就不是那么简单了


当然,我们没有看到在Golang中实现查询引擎还有一个更深层次的原因:)

不,就是这样。如果您经常使用相同的条件,您可以定义一个函数,该函数将闭包作为参数,并为满足条件的每个值调用。我不知道这在您的应用程序中是否有意义,但您是否可以维护一个单独的列表,其中
value.Enabled
为真且范围超过该值?不知道为什么将其称为“apply”不是“地图”,而是一个更好的名字?dunnooh我明白了,是的,这是有道理的,我想如果Rob用“因为…”详细阐述了他的建议会很棒,我不同意,因为循环是一种初级水平,而使用收集方法是一种高级水平。令人遗憾的是,Go仍然没有现成的map/filter/reduce/any/take/skip等方法。为什么要标记为答案?这是一种非常固执己见的说法。显然,函数式方法有其明显的优势,否则它就不会像今天这样受欢迎,而Golang缺少被认为是当今大多数语言的基本功能这一事实并不意味着你“不应该使用”这些功能。不确定“定期更新”是赞成还是反对使用它?我通常不希望对我的核心实用程序进行更新。这一点很好@Magnus,但应该在您的设置中锁定版本,以确保不会发生这种情况。它们确实有标签。根据我所看到的,这很好。我计划把它纳入未来的项目中。对我来说,仅仅是执行slice.Contains()的能力是值得的。你所说的“更深层次”的原因是什么?