use*_*304 6 functional-programming scala clojure
例如,我有一个列表(1 2 3 4 5 6 7 8 9 10 11)
,并希望通过3个元素(或另一个长度)粗糙来获得((1 2 3) (4 5 6) (7 8 9) (10 11))
.我可以使用什么漂亮的代码呢?谢谢.
Tho*_*ung 15
List(1,2,3,4,5,6,7,8,9,10,11) grouped 3 toList
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6),
List(7, 8, 9), List(10, 11))
Run Code Online (Sandbox Code Playgroud)
Mic*_*zyk 15
既然你也使用Clojure标签......
在Clojure 1.2中有一个内置函数可以在clojure.contrib.seq-utils中的1.1中使用.
(partition-all 3 [1 2 3 4 5 6 7 8 9 10 11])
; => ((1 2 3) (4 5 6) (7 8 9) (10 11))
Run Code Online (Sandbox Code Playgroud)
另见partition
和partition-by
.另外请注意,partition
和partition-all
,如果你需要的东西略有不同的接受一些可选参数,例如见(doc partition)
在REPL.
def split[A](list : List[A], n : Int) : List[List[A]] = list match {
case List() => List()
case _ => (list take n) :: split(list drop n, n)
}
Run Code Online (Sandbox Code Playgroud)