以滑动窗口的方式分组 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) **/ } }

 

posted @ 2019-07-21 16:28  茗::流  阅读(212)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。