假设我想编写一个执行此操作的函数:
输入:[1,1,3,3,4,2,2,5,6,6] 输出:[[1,1],[3,3],[4],[2,2],[5 ],[6,6]]
它将相同的相邻元素分组。
这个方法的名称应该是什么?此操作有标准名称吗?
假设我想编写一个执行此操作的函数:
输入:[1,1,3,3,4,2,2,5,6,6] 输出:[[1,1],[3,3],[4],[2,2],[5 ],[6,6]]
它将相同的相邻元素分组。
这个方法的名称应该是什么?此操作有标准名称吗?
在[1,1,3,3,4,2,2,5,6,6]
中,类似的东西[1,1]
通常被称为运行(如在运行长度编码中,请参阅Scala 中的 RLE)。因此,我将调用该方法groupRuns
。
@tailrec
def groupRuns[A](c: Seq[A], acc: Seq[Seq[A]] = Seq.empty): Seq[Seq[A]] = {
c match {
case Seq() => acc
case xs =>
val (same, rest) = xs.span { _ == xs.head }
groupRuns(rest, acc :+ same)
}
}
scala> groupRuns(Vector(1, 1, 3, 3, 4, 2, 2, 5, 6, 6))
res7: Seq[Seq[Int]] = List(Vector(1, 1), Vector(3, 3), Vector(4), Vector(2, 2), Vector(5), Vector(6, 6))