Tôi có một câu hỏi về hiệu quả của việc hiểu thấu trong scala.Hiệu suất của việc hiểu thấu trong scala
mã sau này mất khoảng 45 giây để chạy khi perm là danh sách khoảng 550 yếu tố
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}
Khi tôi đã thay đổi đoạn mã sau vào sau, nó chạy trong 3 giây với cùng một danh sách perm
perm = some list
for{
perm <- perms.withFilter(_.size > 0)
word <- somefunction(perm) //expensive operation
sentence <- somefunction1(perm) //very expensive operation
} yield { word::sentence}
Sự khác biệt về hiệu suất có liên quan gì đến việc đánh giá lười biếng ở Scala không?
Cảm ơn câu trả lời. Tôi thấy điểm của bạn. Tôi có một câu hỏi tiếp theo về quá trình khử đường. Tại sao câu lệnh đầu tiên được viết là 'perms.withFilter (_. Size> 0) .flatMap {}' và không phải 'perms.withFilter (_. Size> 0) .foreach {}'? – Piyush
'foreach' trả về' Đơn vị', do đó kết quả của bạn sẽ bị mất. – drexin
Ah, tôi hiểu rồi. Vì vậy, sau đây sẽ cho hiểu biết 'cho {x <- x1, y <-y1, z <-z1} năng suất (x ::: y ::: z)' dịch sang 'x1.flatmap {x => y1. flatmap {y => z1.map {z => x :: y :: z}}} '? – Piyush