首页 > 解决方案 > 循环遍历列表,每次获取越来越多的元素

问题描述

假设我有一个看起来像的列表

{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”的方式来完成这种行为?

标签: scalacollections

解决方案


你可以使用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)

推荐阅读