在拆分序列

问题描述:

我有一个序列使用分区方法说这就像在拆分序列

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]执行此操作的结果。

如果确定有多个遍历,尝试了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) 

好吧,我想出了另一种方式。这可以使用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 
    })