Scara版本的Rubys'pert_slice?

时间:2010-03-16 16:16:36

标签: ruby collections scala scala-2.8

Scala是否有Array类中的Rubys'each_slice版本?

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:6)

使用Scala 2.8进行测试:

scala> (1 to 10).grouped(3).foreach(println(_))
IndexedSeq(1, 2, 3)
IndexedSeq(4, 5, 6)
IndexedSeq(7, 8, 9)
IndexedSeq(10)