2016-06-07 87 views
0

我有一個序列使用分區方法說這就像在拆分序列

val a:Seq[Any]=Seq("Hai",1,2,"Hello") 

現在我想這個序列分成2個不同的序列seqString是數據類型StringseqInt是數據類型Int

scala> val partitioned =a.partition(p => p.isInstanceOf[String]) 

這種分裂我的序列2序列是Seq("Hai", "Hello")Seq(1,2)。現在假設我想要操作的,我已經得到的序列,如果我嘗試

scala>partitioned._2.map(x => x+1) 

我無法從分區方法返回Seq[Any]執行此操作的結果。

回答

1

如果確定有多個遍歷,嘗試了collectcase聲明:

scala> val a:Seq[Any]=Seq("Hai",1,2,"Hello") 
a: Seq[Any] = List(Hai, 1, 2, Hello) 

scala> val partitioned = (a.collect{case x: Int => x}, a.collect{case x: String => x}) 
partitioned: (Seq[Int], Seq[String]) = (List(1, 2),List(Hai, Hello)) 

scala> partitioned._1.map(_ * 2) 
res1: Seq[Int] = List(2, 4) 
0

好吧,我想出了另一種方式。這可以使用foldLeft

a.foldLeft((Seq[String](),Seq[Int]()))((accum,b) => 
    b match{ 
    case i:Int => (accum._1,accum._2 :+i) 
    case s:String => (accum._1 :+s,accum._2) 
    case _ => accum 
    })