在拆分序列
问题描述:
我有一个序列使用分区方法说这就像在拆分序列
val a:Seq[Any]=Seq("Hai",1,2,"Hello")
现在我想这个序列分成2个不同的序列seqString
是数据类型String
和seqInt
是数据类型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]
执行此操作的结果。
答
如果确定有多个遍历,尝试了collect
与case
声明:
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
})