第二题也是自已编的,跟上一题类似,有关系的颗粒处理
val para1 = Map(1->"12",23->"26",6->"63") //key - value有规律,方便观察
val para2 = Map(1->"17",23->"20",0->"09",7->"75") //
//result 合并后的结果
//val para Map(1->List("12","17"),23->List("26","20"),6->List("63"),7->List("75"),0->List("09"))
答案是调试无法通过的,先贴在这里,等有空再调试,找了很久不知道原因,自已渣渣水平
package com.org
import scala.annotation.tailrec
/**
* @author Administrator
*/
object DemoTest extends App {
val para1 = Map(1->"12",23->"26",6->"63") //key - value有规律,方便观察
val para2 = Map(1->"17",23->"20",0->"09",7->"75") //
//result 合并后的结果
//val para Map(1->List("12","17"),23->List("26","20"),6->List("63"),7->List("75"),0->List("09"))
def mergeList(par1:Map[Int,String],par2:Map[Int,String]):Map[Int,List[String]] = {
@tailrec
def mergeHelp(parr1:Map[Int,String],lis:Map[Int,List[String]]):Map[Int,List[String]] = {
if(parr1 == Map.empty) lis
parr1 match {
case z:Map[Int,String] => lis.get(z.head._1) match{
case None => mergeHelp(z.tail,lis + (z.head._1 -> (z.head._2 :: Nil)))
case h:Option[List[String]] => {
val res:Map[Int,List[String]] = lis.map{
case (x,y) if(x == z.head._1) => (x,z.head._2 :: y)
case (x,y) =>(x,y)
}
mergeHelp(z.tail,res)
}
}
}
}
val par3:Map[Int,List[String]] = par2.map{
case (x,y) => (x,y :: Nil)
}
mergeHelp(par1,par3)
}
mergeList(para1,para2).map(println)
}