加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 循环嵌套列表的功能方法

发布时间:2020-12-16 09:54:53 所属栏目:安全 来源:网络整理
导读:我有一个问题来比较两棵树.如下所示: case class Node(elem:String,child:List[Node]) 为了比较树的每个元素,我有以下功能: def compare(n1:Node,n2:Node): Boolean { if(n1.elem == n2.elem){ return compare(n1.child,n2.child) }}def compare(c1:List[N
我有一个问题来比较两棵树.如下所示:

case class Node(elem:String,child:List[Node])

为了比较树的每个元素,我有以下功能:

def compare(n1:Node,n2:Node): Boolean {
   if(n1.elem == n2.elem){
      return compare(n1.child,n2.child)
   }
}

def compare(c1:List[Node],c2:List[Node]): Boolean {
    while (c1.notEmpty) {
       //filter,map etc call function above to compare the element recursively
    }
}

基本上算法是针对n1中的每个元素,我们正在检查n2中的匹配.我被告知这是非常必要的方式而不是功能方式.什么是实现这种行为的功能性方法.换句话说,在比较孩子列表时,我们如何删除while循环?

解决方法

如果我正确理解了您的问题,您希望将第一个列表的每个元素与第二个列表的每个元素进行比较.以下代码实现了这一点.它通过尾递归摆脱了while循环.

import scala.annotation.tailrec

def cmp(a:Int,b:Int) = a > b

@tailrec
def compare(xs: List[Int],ys: List[Int]): Boolean = xs match {
    case Nil => true
    case head :: tail if ys.forall(x => cmp(head,x)) => compare(tail,ys)
    case _ => false
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读