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

Kotlin开发:如何在循环中持续传入方法返回的更新列表作为参数

解决方案:迭代时传递更新后的列表

当然有可行的实现方式!你当前的代码问题在于每次循环都传入初始的listOfSeatRows,完全没有复用前一次方法返回的更新列表。我们可以通过两种简洁的方式解决这个问题:


方式一:用可变变量跟踪状态(命令式风格)

声明一个var类型的变量来保存当前的列表状态,每次循环调用getListOfSeatRows时,传入这个变量并将返回值重新赋值给它,这样下一次循环就会用上一次更新后的列表:

fun main(args: Array<String>) {
    val listOfSeatRows = (1..127).toList()
    var currentSeatRows = listOfSeatRows // 初始化当前列表为初始值
    // 假设listOfPass是你定义的包含Seat指令的列表,比如listOf('F', 'B', 'L')
    listOfPass.forEach { seatPass ->
        val seat = Seat.valueOf(seatPass.toString())
        // 用当前列表调用方法,并更新当前列表为返回的新列表
        currentSeatRows = getListOfSeatRows(currentSeatRows, seat)
    }
    // 循环结束后,currentSeatRows就是最终处理后的结果
    println("最终筛选后的座位行: $currentSeatRows")
}

方式二:使用fold函数(函数式风格)

如果你更偏好Kotlin的函数式编程风格,可以用fold函数来实现累积操作。fold会从初始值开始,遍历每个元素并累积出最终结果,全程不需要可变变量:

fun main(args: Array<String>) {
    val listOfSeatRows = (1..127).toList()
    // fold的第一个参数是初始值,lambda中第一个参数是当前累积的列表,第二个是当前遍历的元素
    val finalSeatRows = listOfPass.fold(listOfSeatRows) { currentList, seatPass ->
        val seat = Seat.valueOf(seatPass.toString())
        getListOfSeatRows(currentList, seat)
    }
    println("最终筛选后的座位行: $finalSeatRows")
}

补充说明

你的getListOfSeatRows方法是纯函数(输入相同则输出相同,无副作用),完全不需要修改,上述两种方式都能完美适配它。另外要确保listOfPass是正确定义的指令列表(比如包含"F"、"B"等字符串,或者直接是Seat枚举的实例)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:37:45