我正在尝试将List(1,2,3,4)
之类的Scala列表分成对(1,2) (2,3) (3,4)
,这是一种简单的方法吗?
答案 0 :(得分:65)
val xs = List(1,2,3,4)
xs zip xs.tail
// res1: List[(Int, Int)] = List((1,2), (2,3), (3,4))
正如文档所说,zip
返回由此列表和另一个可迭代集合形成的列表 通过成对组合相应的元素。如果是其中之一 集合比另一个更长,其余的元素是 忽略。
List('a,'b,'c,'d)
压缩List('x,'y,'z)
List(('a,'x), ('b,'y), ('c,'z))
为'd
,忽略了第一个tail
的{{1}}。
在您的示例中,List(1,2,3,4)
的{{1}}为List(2,3,4)
,因此您可以看到它们如何成对压缩。
答案 1 :(得分:11)
要生成对((元组)列表,请尝试此
List(1,2,3,4,5).sliding(2).collect{case List(a,b) => (a,b)}.toList
答案 2 :(得分:7)
List(1,2,3,4).sliding(2).map(x => (x.head, x.tail.head)).toList
res0: List[(Int, Int)] = List((1,2), (2,3), (3,4))