Optionを要素に持つListから、Someである要素だけについて何らかの処理をした結果をMapで返すにはどうするのがScalaらしいのだろう?
例えばこんな感じ?
scala> val ol = List(Some(1), None) ol: List[Option[Int]] = List(Some(1), None) scala> Map() ++ ol.flatMap { _ match { | case Some(i) => List( (i -> i*2) ) | case None => List() | }} res3: scala.collection.immutable.Map[Int,Int] = Map( (1,2) )
こんな風にするとイイよ!という書き方があったら誰か教えて〜。
追記(2011.2.14)
コメントでより良い書き方を教えて頂きました!
scala> val ol = List(Some(1), None) ol: List[Option[Int]] = List(Some(1), None) scala> ol.flatten.map(i => i -> i * 2).toMap res0: scala.collection.immutable.Map[Int,Int] = Map( (1,2) ) scala> ol.collect{case Some(i) => i -> i * 2}.toMap res1: scala.collection.immutable.Map[Int,Int] = Map( (1,2) )
こっちのが断然いい
Version Info
- Scala 2.8.1