Scala 2.8 имеет grouped
, который будет разбивать данные на блоки размером n
(которые можно использовать для достижения функциональности each_slice
):
scala> val a = Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> a.grouped(2).foreach(i => println(i.reduceLeft(_ + _)) )
3
7
11
Насколько я помню, в 2.7.x нет ничего, что могло бы работать из коробки, но его довольно просто собрать из take(n)
и drop(n)
из RandomAccessSeq
:
def foreach_slice[A](s: RandomAccessSeq[A], n: Int)(f:RandomAccessSeq[A]=>Unit) {
if (s.length <= n) f(s)
else {
f(s.take(n))
foreach_slice(s.drop(n),n)(f)
}
}
scala> val a = Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> foreach_slice(a,2)(i => println(i.reduceLeft(_ + _)) )
3
7
11