小编moe*_*oem的帖子

具有功能构造的Scala性能

我目前正在分析用Scala编写的应用程序的性能,我想知道是否可以使用功能构造.一方面,我喜欢功能性编程的优雅和简洁,另一方面,我害怕最终的表现.我发现了一个特别好的例子.

我有一个包含一百万个字符的字符串,我需要对每个数字求和.典型的功能方法是这样的:

val sum = value.map(_.asDigit).sum.toString
Run Code Online (Sandbox Code Playgroud)

然而,这种美观,简洁,功能性的方法需要0.98秒(几乎一秒钟)

var sum = 0;

for(digit <- value)
  sum += digit.asDigit
Run Code Online (Sandbox Code Playgroud)

另一方面,这种必要的方法仅需0.022秒(上述时间的2.​​24%) - 速度提高约50倍......

我确信问题出现了,因为Scala在第一种方法中生成一个新列表,然后再次迭代该列表以创建总和.

依靠功能结构是一个坏主意吗?我的意思是,它们很美 - 我爱它们 - 但它们慢了50倍......

PS我也尝试了别的东西.

val sum = value.foldLeft(0)((sum, value) => sum + value.asDigit)
Run Code Online (Sandbox Code Playgroud)

这种功能性方法虽然简洁,可能比命令式方法更难阅读,但需要0.085秒.它更难阅读,仍然慢4倍......

scala

3
推荐指数
1
解决办法
463
查看次数

标签 统计

scala ×1