FP的Map函数是核心部分,采用分而治之,讲究以单元的方式处理数据,所以在一些“关联数据”处理时就不能直接Map处理了,最好的方式是采用命令编程方式处理,或者在Map中产生side-effect(不过很少怎么做的,FP函数讲究最大层次的Pure),下面我们使用尾递归处理
下面是根据我的思路来写题目,可能最好方式不是尾递归,但将就着用吧
实现对偶分组:建议自己思考后再参考我的答案
val list:List[Int] = List(1,2,2,3,4,43,23,11,2,6,7,78,9)
//目的-将list内的数据按奇偶分开,
//reault => list2 = List(List(1,3,43,23,11,7,9),List(2,2,4,2,6,78)) ---****按照前后顺序分开
我的答案
package com.org
import scala.annotation.tailrec
/**
* @author Administrator
*/
object DemoTest extends App {
val list:List[Int] = List(1,2,2,3,4,43,23,11,2,6,7,78,9)
//目的-将list内的数据按奇偶分开,
//reault => list2 = List(List(1,3,43,23,11,7,9),List(2,2,4,2,6,78)) -----按照顺序分开
def splitNum(list:List[Int]):List[List[Int]] = {
@tailrec
def spliteHelp(list1:List[Int],list2:List[List[Int]]):List[List[Int]]={
if(list1 == Nil) list2
else list1 match{
case head::tail => head match {
case x:Int if(x % 2==1) => spliteHelp(tail,List((head :: list2(0)),list2(1)))
case y:Int if(y % 2==0) => spliteHelp(tail,List(list2(0),(head :: list2(1))))
}
case x => x(0) match {
case s:Int if(s % 2==1) => spliteHelp(Nil,List((s :: list2(0)),list2(1)))
case z:Int if(z % 2==0) => spliteHelp(Nil,List((z :: list2(0)),list2(1)))
}
}
}
spliteHelp(list,List(List.empty[Int],List.empty[Int]))
}
splitNum(list).map{_.reverse}
}