scala - 在scala中一次迭代实现遍历功能

标签 scala functional-programming traversal

它结合了 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/

相关文章:

scala - 如何在集群模式下以交互方式运行 spark

scala - 如何让 scala 编译器找到使用错误参数的案例类

json - Play Framework : How to convert a List to a JsArray

functional-programming - 在过滤掉 Rust 中的 None 元素后,是否有可能以某种方式将 Vec<Option<Value>> 转换为 Vec<Value> ?

c - 使用 FTS fts_open() 时 strlen 中的段错误

scala - 如何将 DataFrame 与其自身连接并聚合

functional-programming - 如何在 elm 中将列表分成四个列表?

Scala 迭代构建列表

java数组循环遍历

java - 遍历自定义链表