How to generate the power set of a set in Scala

前端 未结 8 1950
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-13 14:41

I have a Set of items of some type and want to generate its power set.

I searched the web and couldn\'t find any Scala code that adresses this specific task.

8条回答
  •  爱一瞬间的悲伤
    2020-12-13 15:16

    Can be as simple as:

    def powerSet[A](xs: Seq[A]): Seq[Seq[A]] = 
      xs.foldLeft(Seq(Seq[A]())) {(sets, set) => sets ++ sets.map(_ :+ set)}
    

    Recursive implementation:

    def powerSet[A](xs: Seq[A]): Seq[Seq[A]] = {
      def go(xsRemaining: Seq[A], sets: Seq[Seq[A]]): Seq[Seq[A]] = xsRemaining match {
        case Nil => sets
        case y :: ys => go(ys, sets ++ sets.map(_ :+ y))
      }
    
      go(xs, Seq[Seq[A]](Seq[A]()))
    }
    

提交回复
热议问题