8
斯卡拉是否有从Array类Rubys'each_slice版本?Scala版本的Rubys'each_slice?
斯卡拉是否有从Array类Rubys'each_slice版本?Scala版本的Rubys'each_slice?
的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
测试使用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)
最好是创建一个'Array'封装类,它使用原始'Array'作为后端,而目前只有一部分。然后可以将隐式'eachSlice'方法添加到'Array',返回'List [ArraySlice]'。你不想在你的答案中去看看吗? :-)我不能给你更多的选票,但我很佩服你。 :-) :-) – 2010-03-16 18:19:22
@Daniel:哈哈哈 - 是的,它会更好(更快),但是如果它不在图书馆某处(为什么会因为我们已经在2.8中进行了分组?),我认为我将把它作为读者的练习。 – 2010-03-16 18:37:12
这对于就地算法会更好。您可以随时将其提交给Scala。不过,请首先更好地注册贡献者表单。我希望看到这样的选项。 – 2010-03-16 19:23:32