我想在列表中对连续的条目进行分组。这是一个例子:
// Input:
val list = List("A","B","C","D","E","F")
// Result:
List("ABC", "BCD", "CDE", "DEF", "EF")
在Scala中执行此操作最常用的方法是什么?
答案 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)
在字母序列上使用take
和drop
可以获得相同的结果;让
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字符串的多功能性。