2017-02-05 6 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

(предполагается, что вы неважно, если вы вложенные пары являются списками, а не кортежами)

Коллекция Scala имеет функцию окна 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)) 

 Смежные вопросы

  • Нет связанных вопросов^_^