scala 从给定列表中生成所有可能值的cartesie乘积

dnph8jn4  于 4个月前  发布在  Scala
关注(0)|答案(1)|浏览(117)

我想修改这段代码来解决内存不足的问题:

case Nil => Seq(Seq.empty)
    case column :: others =>
      others.foldLeft(Seq(Seq(column.apply(size)))) {
        case (product, values) =>
          for {
            seq   <- product
            value <- values
          } yield seq :+ value
      }
  }

字符串

1mrurvl1

1mrurvl11#

而不是foldLeft,做一个常规的for-理解(或循环),它不会产生任何(Unit)可变数据(你的 Package 器Seq)。
在当前的场景中,在每个foldLeft迭代中,我们通过将value追加到seq来创建另一个Seq()
类似于:

case Nil => Seq(Seq.empty)
    case column :: others =>
      val lb = mutable.ListBuffer(Seq(column.apply(size)))
      for {
        value <- others
        lb += value
      } yield ()
      lb.toSeq // you might need to convert the `ListBuffer` to `Seq` I guess for compatibility

字符串

相关问题