按顺序在Scala中的List中分组条目

时间:2015-12-29 14:01:28

标签: scala

我想在列表中对连续的条目进行分组。这是一个例子:

// Input: 
val list = List("A","B","C","D","E","F")
// Result:
List("ABC", "BCD", "CDE", "DEF", "EF")

在Scala中执行此操作最常用的方法是什么?

2 个答案:

答案 0 :(得分:1)

一般来说,因为字符串是Scala中的集合,所以它实际上比@om建议更容易:

"ABCDEF".sliding(3).toList
// List(ABC, BCD, CDE, DEF)

但是最后要求EF,你可能需要稍微不同的东西:

val letters = "ABCDEF".toSeq :+ ""
val groups = letters.sliding(3).map(_.mkString)
groups.toList
// List(ABC, BCD, CDE, DEF, EF)

答案 1 :(得分:0)

在字母序列上使用takedrop可以获得相同的结果;让

val letters = 'A' to 'F'
NumericRange(A, B, C, D, E, F)

等等

for (i <- 0 to letters.size - 2) yield letters.drop(i).take(3).mkString
Vector(ABC, BCD, CDE, DEF, EF)

请注意,在上一次迭代中,我们将最多 3个字母,即使只有2个字母可用。

这种方法不如惯用语sliding有效,但它说明了配备收集方法的Scala字符串的多功能性。