Kotlin标准库是否有返回中间结果的fold类函数?求FP通用名称
关于类似fold但返回所有中间结果的函数
嘿,这个需求太贴合函数式编程的常见场景啦!这类函数在函数式编程领域有个通用名称——scan,而且Kotlin标准库早就内置了这个工具,完全能满足你的需求!
先直接给你匹配需求的代码示例:
// 假设你的f(acc, it)是简单累加逻辑 val res = listOf(1,2,3).scan(0) { acc, it -> acc + it }.drop(1) // 此时res的值就是 [1,3,6],完美符合你想要的效果
为什么这么写?
Kotlin的scan函数和fold的核心逻辑一致:从指定的初始值出发,依次对集合中的每个元素应用累加函数。但和fold只返回最终累加结果不同,scan会把每一步的累加结果都收集起来,返回一个包含初始值和所有中间结果的列表。比如直接调用listOf(1,2,3).scan(0) { acc, it -> acc + it },得到的结果是[0,1,3,6]——如果你不需要开头的初始值,只需要用drop(1)去掉第一个元素就好。
额外小补充
如果你需要从右往左进行累加(对应foldRight的使用场景),Kotlin还提供了scanRight函数,用法类似,只是遍历集合的顺序相反。
内容的提问来源于stack exchange,提问作者miho
相关产品推荐
相关产品推荐

