拆分操作是把一個容器裏的元素按一定的規則分割成多個子容器。
常用的拆分方法有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)