它结合了 Option
的列表s 合一 Option
包含所有 Some
的列表原始列表中的值。如果原始列表包含 None
即使一次,函数的结果应该是 None
,否则结果应该是 Some
带有所有值的列表。签名是
def sequence[A](a: List[Option[A]]): Option[List[A]]
我想出了以下解决方案
def sequence[A](l: List[Option[A]]): Option[List[A]] = {
if (l.exists(_.isEmpty)) None
else Some(l.map(_.get))
}
这似乎并不完美,因为它迭代列表并应用
f
函数两次以平均 50% 的元素。
最佳答案
这是一个快速而肮脏的解决方案,肯定会冒犯每个人的良好功能敏感性:)
import scala.util.Try
def sequence[A](xs: List[Option[A]]): Option[List[A]] =
Try(xs.map(_.get)).toOption
关于scala - 在scala中一次迭代实现遍历功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902545/