You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改笛卡尔积生成代码以解决内存溢出问题

解决Scala笛卡尔积内存溢出问题

原代码的核心问题是使用严格求值的Seq(默认实现为List),会一次性生成并存储所有笛卡尔积结果,当输入列表规模较大时,直接触发内存溢出。

修改方案是改用惰性求值的LazyList(Scala 2.13+版本推荐),它会按需生成元素,不会一次性把所有结果加载到内存:

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

关键改动说明

  • 将所有Seq替换为LazyList:LazyList是惰性集合,元素仅在被访问时才会计算,不会提前占用内存。
  • 对输入的values调用.to(LazyList):确保遍历values时也是惰性的,避免提前加载全部元素。

如果使用的是Scala 2.12及更早版本,可以用Stream替代LazyList(两者行为类似,Stream是旧版惰性集合实现):

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

内容的提问来源于stack exchange,提问作者Im89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:57:39