Есть ли операция со списком Scala, которая делает кортежи из списков? - PullRequest
6 голосов
/ 04 ноября 2011

Я пытаюсь обработать тройки в списке.Обязательно, я мог бы сделать это:

for(i = 1; i < list.length-1; i++)
{
   process( list[i-1], list[i], list[i+1] )
}

Есть ли в Scala функция List (или как бы ее написать), которая может сделать что-то вроде этого:

val data = [1,2,3,4,5,6,7,8,9,10]
val tuples = data.some_magic_func
tuples would be[(1,2,3), (2,3,4), (3,4,5), (4,5,6) ... ]

Спасибо!

Ответы [ 3 ]

23 голосов
/ 04 ноября 2011

Решение Пабло не совсем корректно, вам все равно нужно преобразовать список списков в список кортежей:

val data = List(1,2,3,4,5,6,7,8,9,10)
val tuples = data.sliding(3).toList.collect{ case List(x,y,z) => (x,y,z) }
//--> tuples: List[(Int, Int, Int)] = List((1,2,3), (2,3,4), (3,4,5), ...
10 голосов
/ 04 ноября 2011

Я знаю, что вы получили ответ, который хотели, но технически правильный ответ нет .Нет общего метода, который бы брал список и возвращал кортежи переменной arity, потому что в настоящее время нет способа представить эту сигнатуру типа в Scala.

8 голосов
/ 04 ноября 2011
val data = List(1,2,3,4,5,6,7,8,9,10)
val tuples = data.sliding(3).toList
// tuples would be List(List(1,2,3), List(2,3,4), List(3,4,5), List(4,5,6) ... )
...