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
相关产品推荐
相关产品推荐

