Trong 2.8, bạn có thể muốn sử dụng phương pháp:
scala> val a = "ABCDEF".toList.map(_.toString)
a: List[java.lang.String] = List(A, B, C, D, E, F)
scala> a.grouped(2).partialMap{ case List(a,b) => (a,b) }.toList
res0: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
(Đây là 2.8.0 Beta1; thân mới nhất có collect
thay cho partialMap
.)
Trong 2,7 - và không phải là một xấu Á hậu trong 2.8 - bạn có thể tạo ra một phương pháp đệ quy như legoscia đã làm:
def zipPairs[A](la : List[A]): List[(A,A)] = la match {
case a :: b :: rest => (a,b) :: zipPairs(rest)
case _ => Nil
}
scala> zipPairs(a)
res1: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
Edit: đây là một cách tiếp cận ngắn hơn hoạt động trên 2,7 cũng:
scala> (a zip a.drop(1)).zipWithIndex.filter(_._2 % 2 == 0).map(_._1)
res2: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
(Lưu ý việc sử dụng drop(1)
thay vì tail
để nó hoạt động với danh sách rỗng.)
này sẽ không làm việc cho các danh sách miễn là nó không phải là đệ quy đuôi. –