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

Scala如何以函数式方式实现迭代累加 避免使用var可变变量

Scala无可变变量的函数式最小耗时实现

改造目标

移除原命令式实现中的var可变变量,全程使用不可变值实现完全等价的计算逻辑:遍历反转字符串时动态计算当前路径耗时,同时记录遍历过程中的全局最小耗时。

核心实现

使用foldLeft折叠操作承载遍历过程中的状态传递,全程不引入任何可变变量,逻辑与原实现完全一致:

def findMinTime(str: String, timeByCar: Int): Int = {
  str.reverse.foldLeft((timeByCar, timeByCar)) { case ((currentTime, currentMin), c) =>
    val updatedTime = if (c == 'A') currentTime + 3 else currentTime - 2
    (updatedTime, math.min(currentMin, updatedTime))
  }._2
}

实现说明

  • 折叠初始状态传入二元组(timeByCar, timeByCar),两个值分别对应原实现中myTime、minTime的初始值
  • 每遍历一个字符,基于上一步的不可变状态计算新的当前耗时,再通过math.min得到截止当前位置的最小耗时,全程无值修改操作,所有中间结果都是不可变的val
  • 遍历完成后取结果元组的第二个元素,即为全流程的最小耗时
  • 该实现和原命令式版本逻辑100%对齐,相同输入会得到完全一致的输出,无行为差异,符合函数式编程无副作用、引用透明的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:25:25