我对scala中的理解效率有疑问。scala中的理解性能
这下面的代码需要大约45秒时的烫发是大约550元素
perm = some list
for{
perm <- perms.withFilter(_.size > 0)
wordList = somefunction(perm) //expensive operation, wordlist is a list of strings
sentenceList = somefunction1(perm) //very expensive operation, sentenceList is a list of list of strings
word <- wordList
sentence <- sentenceList
} yield { word::sentence}
当我改变下面的代码到下面的列表来运行,它在3秒跑用相同的烫发列表
perm = some list
for{
perm <- perms.withFilter(_.size > 0)
word <- somefunction(perm) //expensive operation
sentence <- somefunction1(perm) //very expensive operation
} yield { word::sentence}
性能的差异是否与Scala中的懒惰评估有关?
感谢您的回答。我明白你的意思。我有一个跟进关于脱糖过程的问题。为什么第一条语句写成'perms.withFilter(_。size> 0).flatMap {}'而不是'perms.withFilter(_。size> 0).foreach {}'? – Piyush 2014-11-03 18:10:34
'foreach'返回'Unit',所以你的结果将会丢失。 – drexin 2014-11-03 21:26:54
啊,我明白了。那么对于{x < - x1,y <-y1,z <-z1} yield(x ::: y ::: z)的以下for-comprehensions转换为x1.flatmap {x => y1。 flatmap {y => z1.map {z => x :: y :: z}}}'? – Piyush 2014-11-03 21:54:21