加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala用于理解性能

发布时间:2020-12-16 09:25:43 所属栏目:安全 来源:网络整理
导读:为什么是 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毫秒 慢一点: for (a - 1 to 1000) for (b - 1 to 1000 - a) for (c - 1 to 1000 - a - b) if (
为什么是

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毫秒

慢一点:

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,a * b * c))

62毫秒

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

处理答案后的解决方案

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

9毫秒

解决方法

你的理解是错误的.

当条件在循环体中时会发生这种情况:

// this
for(x <- coll) if(condition) doSomething
// will translate to
coll.foreach{ x => if(condition) doSomething }

与条件在发电机本身时相反:

// this
for(x <- coll if(condition)) dosomething
// will translate to
coll.withFilter(x => condition).foreach{ x => dosomething }

您可以查看The Scala Language Speci?cation 6.16以获取更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读