scala之尾递归实际用处2



第二题也是自已编的,跟上一题类似,有关系的颗粒处理


    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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值