2017-02-05 83 views

回答

3

你可以用它尾巴zip名單:

val list = List(1, 2, 3, 4, 5) 
// list: List[Int] = List(1, 2, 3, 4, 5) 

list zip list.tail 
// res6: List[(Int, Int)] = List((1,2), (2,3), (3,4), (4,5)) 
5

(假設你不關心你的嵌套對是列表而不是元組)

斯卡拉集合有一個sliding窗口函數:

@ val lazyWindow = List(1, 2, 3, 4, 5).sliding(2) 
lazyWindow: Iterator[List[Int]] = non-empty iterator 

爲了實現集合:

@ lazyWindow.toList 
res1: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4), List(4, 5)) 

你甚至可以做更多 「funcy」 窗口,像長度爲3,但與第2步:

@ List(1, 2, 3, 4, 5).sliding(3,2).toList 
res2: List[List[Int]] = List(List(1, 2, 3), List(3, 4, 5)) 
1

我一直都是一個pattern matching的粉絲。所以你也可以這樣做:

val list = List(1, 2, 3, 4, 5, 6) 

    def splitList(list: List[Int], result: List[(Int, Int)] = List()): List[(Int, Int)] = { 
    list match { 
     case Nil => result 
     case x :: Nil => result 
     case x1 :: x2 :: ls => splitList(x2 :: ls, result.:+(x1, x2)) 
    } 
    } 

    splitList(list) 
    //List((1,2), (2,3), (3,4), (4,5), (5,6))