Scala中拆分操作partition、grouped、groupBy和sliding函數

拆分操作是把一個容器裏的元素按一定的規則分割成多個子容器。

常用的拆分方法有partition、groupBy、grouped和sliding。

partition

partition方法接受一個布爾函數,用該函數對容器元素進行遍歷,以二元組的形式返回滿足條件和不滿足條件的兩個 C[T]類型的集合。

    val list=1 to 10

    // partition拆分爲二元組
    println(list.partition(_<5))

輸出結果

(Vector(1, 2, 3, 4),Vector(5, 6, 7, 8, 9, 10))

groupBy

groupBy方法接受一個返回U類型的函數,用該函數對容器元素進行遍歷,將返回值相同的元素作爲一個子容器,並與該相同的值構成一個鍵值對,最後返回的是一個類型爲Map[U,C[T]]的映射。

    // groupedBy拆分爲多元組
    println(list.groupBy(_%5))

輸出結果

Map(0 -> Vector(5, 10), 1 -> Vector(1, 6), 2 -> Vector(2, 7), 3 -> Vector(3, 8), 4 -> Vector(4, 9))

grouped和sliding

grouped和sliding方法都接受一個整型參數n,兩個方法都將容器拆分爲多個與原容器類型相同的子容器,並返回由這些子容器構成的迭代器,即Iterator[C[T]]。

其中,grouped按從左到右的方式將容器劃分爲多個大小爲n的子容器(最後一個的大小可能小於n);sliding使用一個長度爲n的滑動窗口,從左到右將容器截取爲多個大小爲n的子容器。

grouped

    // grouped根據指定大小切分
    val newList=list.grouped(3)
    while (newList.hasNext){
      println(newList.next())
    }

輸出結果

Vector(1, 2, 3)
Vector(4, 5, 6)
Vector(7, 8, 9)
Vector(10)

sliding

    // sliding滑動切分
    val newListSliding=list.sliding(3)
    while (newListSliding.hasNext){
      println(newListSliding.next())
    }

輸出結果

Vector(1, 2, 3)
Vector(2, 3, 4)
Vector(3, 4, 5)
Vector(4, 5, 6)
Vector(5, 6, 7)
Vector(6, 7, 8)
Vector(7, 8, 9)
Vector(8, 9, 10)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章