如果班次的大小是参数。
def shiftN[A](s: Seq[A], nb: Int) : A => A =
a => s((s.indexOf(a) + nb)%s.length)
但是如果移位的大小总是相同(例如1)并且函数将被多次调用,我们可以做一个优化。 (因此,关于直接访问结果的增益,构建地图的开销很小。)
def shift1[A](s: Seq[A]) : A => A = {
val shifted = s.tail :+ s.head
val m = s.zip(shifted).toMap
a => m(a)
}
有更好的方法吗?