这个问题与this question相反。
val x = Some((1, 2))
val (y: Option[Int], z: Option[Int]) = ???
纯粹的Scala答案和Scalaz答案都是有帮助的。
最佳答案
我实际上认为您的答案很清楚,但是由于您提到了Scalaz,因此此操作称为unzip
:
scala> import scalaz._, std.option._
import scalaz._
import std.option._
scala> val x: Option[(Int, Int)] = Some((1, 2))
x: Option[(Int, Int)] = Some((1,2))
scala> Unzip[Option].unzip(x)
res0: (Option[Int], Option[Int]) = (Some(1),Some(2))
您应该能够简单地编写
x.unzip
,但是不幸的是,标准库从Option
到Iterable
的可怕的隐式转换将首先出现,最后得到(Iterable[Int], Iterable[Int])
。一年后回头:实际上可以使用Scalaz的
UnzipPairOps
来做到这一点:scala> import scalaz.std.option._, scalaz.syntax.unzip._
import scalaz.std.option._
import scalaz.syntax.unzip._
scala> val x: Option[(Int, Int)] = Some((1, 2))
x: Option[(Int, Int)] = Some((1,2))
scala> x.unfzip
res0: (Option[Int], Option[Int]) = (Some(1),Some(2))
你在想什么,2014年我?
关于scala - 如何在Scala中将选项元组转换为选项元组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21463002/