以滑动窗口的方式分组 Iterable对象
现实中,滑动窗口算法经常用在处理流的算法中。
你可以把它看成一个滑动的窗口,处理完窗口内的数据后,这个窗口会向后滑动一定的位置再接着处理,
然后再滑动,再处理.......。这里讨论的滑动窗口是大小固定的窗口。
package main object Test { def main(args: Array[String]): Unit = { val t = Iterable(1 to 13: _*); println(t); //List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) val result = t.sliding(3); //默认步进值为1 println(result.getClass.getName); //scala.collection.Iterator$$anon$10 println(result); //<iterator> result.foreach(x => println(x)); /** * List(1, 2, 3) * List(2, 3, 4) * List(3, 4, 5) * List(4, 5, 6) * List(5, 6, 7) * List(6, 7, 8) * List(7, 8, 9) * List(8, 9, 10) * List(9, 10, 11) * List(10, 11, 12) * List(11, 12, 13) */
val size = 3; //窗口中元素的数量 val step = 3; //每次滑动的步进值 val result2 = t.sliding(size, step); result2.foreach(x => println(x) ); /** * List(1, 2, 3) * List(4, 5, 6) * List(7, 8, 9) * List(10, 11, 12) * List(13) **/
val result3 = t.sliding(2, 3);//每次处理2个。同时每次滑动的时候步进值为3 result3.foreach(x => println(x) ); /** * List(1, 2) * List(4, 5) * List(7, 8) * List(10, 11) * List(13) */
val result4 = t.sliding(5, 2); result4.foreach(x => println(x) ); /** * List(1, 2, 3, 4, 5) * List(3, 4, 5, 6, 7) * List(5, 6, 7, 8, 9) * List(7, 8, 9, 10, 11) * List(9, 10, 11, 12, 13) **/ } }

浙公网安备 33010602011771号