Hoặc nếu bạn muốn tự làm:
def split[A](xs: List[A], n: Int): List[List[A]] = {
if (xs.size <= n) xs :: Nil
else (xs take n) :: split(xs drop n, n)
}
Sử dụng:
scala> split(List(1,2,3,4,5,6,"seven"), 4)
res15: List[List[Any]] = List(List(1, 2, 3, 4), List(5, 6, seven))
chỉnh sửa : khi xem xét điều này 2 năm sau, tôi sẽ không khuyến nghị triển khai này vì size
là O (n), và do đó phương pháp này là O (n ^ 2), điều này sẽ giải thích tại sao phương pháp tích hợp trở nên nhanh hơn đối với các danh sách lớn, như đã lưu ý trong bình luận bên dưới. Bạn có thể triển khai hiệu quả như sau:
def split[A](xs: List[A], n: Int): List[List[A]] =
if (xs.isEmpty) Nil
else (xs take n) :: split(xs drop n, n)
hoặc thậm chí (một chút) hiệu quả hơn bằng cách sử dụng splitAt
:
def split[A](xs: List[A], n: Int): List[List[A]] =
if (xs.isEmpty) Nil
else {
val (ys, zs) = xs.splitAt(n)
ys :: split(zs, n)
}