scala - 循环遍历列表,每次获取越来越多的元素
问题描述
假设我有一个看起来像的列表
{A, B, C, D, E}
我想遍历这个列表,每次得到越来越多的元素,所以每次迭代看起来像:
Iteration 1: {A}
Iteration 2: {A, B}
Iteration 3: {A, B, C}
Iteration 4: {A, B, C, D}
Iteration 5: {A, B, C, D, E}
目前我正在通过以下方式完成此操作:
(1 to list.size).foreach( n => {
val elements = list.take(n)
// Do something with elements
})
但这感觉很乱。是否有更“scala”的方式来完成这种行为?
解决方案
你可以使用list.inits
:
scala> List(1,2,3,4,5).inits.foreach(println)
List(1, 2, 3, 4, 5)
List(1, 2, 3, 4)
List(1, 2, 3)
List(1, 2)
List(1)
List()
要获得所需的输出,您需要从迭代器创建一个列表,将其反转并取尾部以省略空列表:
scala> List(1,2,3,4,5).inits.toList.reverse.tail.foreach(println)
List(1)
List(1, 2)
List(1, 2, 3)
List(1, 2, 3, 4)
List(1, 2, 3, 4, 5)
推荐阅读
- python-3.x - 儒略日数到python中的本地日期时间
- log4j2 - Splunk 中的日志消息显示为 ASCII 数字
- rust - 无法将向量值分配给结构中的字段:预期 8 个可能的标记之一
- c# - Dapper 如何设置只读属性?
- c++ - 我正在制作一个 AVL 树程序,我的左右变量出现错误
- python - networkx "remove_edges_from" 删除循环
- r-raster - 绘图错误:“do.call("constructMargin", margin) 中的错误:第二个参数必须是一个列表”
- networking - 如何在 Android 10 中扫描连接到同一 wifi 的 wifi 设备及其名称?
- typescript - 通用咖喱函数的打字稿类型
- python - 在 setUpClass 中获取 Flask-Testing 服务器 URL