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