【问题标题】:Which is best: collection.each or for each? [duplicate]哪个最好:collection.each 还是 for each? [复制]
【发布时间】:2016-02-29 14:56:59
【问题描述】:

推荐这两种遍历列表的方式中的哪一种:

List list = [1, 2, 3]
list.each { num ->
    // Do something
}

或

List list = [1, 2, 3]
for (num in list) { 
    // Do something
}

?

这些对性能有什么影响吗?我认为,至少在可读性方面,它们是相同的。

【问题讨论】:

  • Groovy 采用了与 Perl 相似的理念:有不止一种方法可以做到这一点。如果我可以支持对集合起作用的操作,我会尽量避免这两种情况,以减少代码中的副作用。
  • 如果您想潜在地跳出循环,那么for(x in y) 之一。如果不是,当然是前者,如果你要从列表中创建一个新列表,那么 collect 代替 each

标签: groovy


【解决方案1】:

这取决于您在代码块中执行的操作。您可能想要利用闭包的委托,或者您可能想要在不同的上下文中重用一个闭包,这将是使用each 的参数。如果这些都不适用,for 循环可能更有意义,并且性能会好一点。

【讨论】:

    【解决方案2】:

    从使用POV来看,它们的主要区别在于你异常终止循环的方式。

    for-each 直截了当:

    for (num in list) { 
       if( someCond ) break
    }
    

    而each 则必须抛出异常:

    list.each{ 
       if( someCond ) throw new Exception( "" )
    }
    

    这不是很好。

    【讨论】:

    • 嗯...我不提倡抛出异常来停止 each 块,我更愿意看到建议使用正确的循环结构
    • 绝对不要使用Exception 方法。这是个坏主意。
    • “它们之间的主要区别在于异常终止循环的能力” - 我不同意这是主要区别。有一些根本不同的选项适用于关闭,这些选项比纾困选项更重要。
    • 我是不是写了一些关于“倡导”的文章?
    • 他公开提倡反对它,说它不好。我没有得到多少反对票,IMO 这是一个完全有效的比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2015-11-03
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多