是否有scala列表操作从列表中生成元组?

fbl*_*fbl 6 functional-programming scala tuples list

我正在尝试在列表中处理三元组.当然,我可以做到这一点:

for(i = 1; i < list.length-1; i++)
{
   process( list[i-1], list[i], list[i+1] )
}
Run Code Online (Sandbox Code Playgroud)

在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) ... ]
Run Code Online (Sandbox Code Playgroud)

谢谢!

Lan*_*dei 23

Pablo的解决方案并不完全正确,您仍需要将列表列表转换为元组列表:

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), ...
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 10

我知道你得到了你想要的答案,但技术上正确的答案是否定的.没有通用方法可以获取列表并返回变量arity的元组,因为目前无法在Scala中表示该类型签名.


Pab*_*dez 8

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) ... )
Run Code Online (Sandbox Code Playgroud)

  • @Pablo Fernandez:这不正确,结果是`元组:List [List [Int]] = List(List(1,2,3),List(2,3,4),...` (4认同)