zap*_*dlo 3 functional-programming scala traversal
它将一个Options 列表合并为一个Option包含Some原始列表中所有值的列表的列表.如果原始列表包含None一次,则函数的结果应该是None,否则结果应该是Some所有值的列表.签名是
def sequence[A](a: List[Option[A]]): Option[List[A]]
Run Code Online (Sandbox Code Playgroud)
我提出了以下解决方案
def sequence[A](l: List[Option[A]]): Option[List[A]] = {
if (l.exists(_.isEmpty)) None
else Some(l.map(_.get))
}
Run Code Online (Sandbox Code Playgroud)
这似乎并不完美,因为它迭代列表并将f函数应用两次以平均50%的元素.
这是一个快速而肮脏的解决方案,肯定会冒犯每个人的良好功能感受:)
import scala.util.Try
def sequence[A](xs: List[Option[A]]): Option[List[A]] =
Try(xs.map(_.get)).toOption
Run Code Online (Sandbox Code Playgroud)