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

列出Scala中重复的组合

发布时间:2020-12-16 19:19:47 所属栏目:安全 来源:网络整理
导读:试着学习一点 Scala并遇到这个问题.我找到了一个没有重复的所有组合的解决方案 here,我有点理解它背后的想法,但是一些语法让我搞砸了.我也不认为该解决方案适用于重复的情况.我想知道是否有人可以建议我可以使用的一些代码.我有很多关于组合学的材料,并且理
试着学习一点 Scala并遇到这个问题.我找到了一个没有重复的所有组合的解决方案 here,我有点理解它背后的想法,但是一些语法让我搞砸了.我也不认为该解决方案适用于重复的情况.我想知道是否有人可以建议我可以使用的一些代码.我有很多关于组合学的材料,并且理解问题和迭代解决方案,我只是在寻找scala-y的方法.

谢谢

解决方法

我现在明白你的问题.我认为实现您想要的最简单方法是执行以下操作:

def mycomb[T](n: Int,l: List[T]): List[List[T]] =
  n match {
    case 0 => List(List())
    case _ => for(el <- l;
              sl <- mycomb(n-1,l dropWhile { _ != el } ))
              yield el :: sl
}

def comb[T](n: Int,l: List[T]): List[List[T]] = mycomb(n,l.removeDuplicates)

comb方法只是调用mycomb,并从输入列表中删除重复项.删除重复项意味着以后更容易测试两个元素是否“相同”.我对mycomb方法的唯一改变是,当递归调用该方法时,我将删除列表中el之前出现的元素.这是为了阻止输出中出现重复.

> comb(3,List(1,2,3))
> List[List[Int]] = List(
    List(1,1,1),2),3),3,List(2,List(3,3))

> comb(6,2))
> List[List[Int]] = List(
    List(1,2))

(编辑:李大同)

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

    推荐文章
      热点阅读