斯卡拉COM prehension性能 [英] Scala for comprehension performance

查看:199
本文介绍了斯卡拉COM prehension性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么

for (
  a <- 1 to 1000;
  b <- 1 to 1000 - a;
  c <- 1 to 1000 - a - b;
  if (a * a + b * b == c * c && a + b + c == 1000)
) println((a, b, c, a * b * c))

266毫秒

266 ms

慢然后:

for (a <- 1 to 1000)
  for (b <- 1 to 1000 - a)
    for (c <- 1 to 1000 - a - b)
      if (a * a + b * b == c * c)
        if (a + b + c == 1000)
          println((a, b, c, a * b * c))

62毫秒

如果我理解正确的,这应该是一样的吗?

If I understand correct this should be the same?

加工答案后解决方法:

for (
  a <- 1 to 1000;
  b <- 1 to (1000 - a)
) {
  val c = (1000 - a - b)
  if (a * a + b * b == c * c)
    println((a, b, c, a * b * c))
}

9毫秒

推荐答案

您的理解是错误的。

for(x <- coll) if(condition) dosomething

将转化为

coll.foreach{x => if(condition) dosomething }

for(x <- coll if(condition))  dosomething

这将转化为

coll.withFilter(x => condition).foreach{ x => dosomething }

您可以看看 Scala语言规格网络阳离子6.16 了解更多详情。

You can look into The Scala Language Specification 6.16 for more details.

这篇关于斯卡拉COM prehension性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆