Версия Scala each_slice Рубинов?

У Scala есть версия each_slice Рубинов от класса Массива?

8
задан oxbow_lakes 16 March 2010 в 21:55
поделиться

2 ответа

Scala 2.8 имеет сгруппированные , которые разбивают данные на блоки размером 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
12
ответ дан 5 December 2019 в 09:25
поделиться

Проверено на 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)
6
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: