创建包含滞后元组的Scala序列的优雅方法
我想创建一个包含元组的Scala序列。输入是如下所示的文本文件:创建包含滞后元组的Scala序列的优雅方法,scala,tuples,seq,Scala,Tuples,Seq,我想创建一个包含元组的Scala序列。输入是如下所示的文本文件: A B C D E (A, B), (B, C), (C, D), (D, E) 我正在寻找一种优雅的方法来构造“滞后”元组,如下所示: A B C D E (A, B), (B, C), (C, D), (D, E) 我不确定它有多优雅,但这至少适用于包含1个以上元素的所有列表: val l = List('A,'B,'C,'D,'E,'F) val tupled = l.sliding(2).map{case x ::
A
B
C
D
E
(A, B), (B, C), (C, D), (D, E)
我正在寻找一种优雅的方法来构造“滞后”元组,如下所示:
A
B
C
D
E
(A, B), (B, C), (C, D), (D, E)
我不确定它有多优雅,但这至少适用于包含1个以上元素的所有列表:
val l = List('A,'B,'C,'D,'E,'F)
val tupled = l.sliding(2).map{case x :: y :: Nil => (x,y)}
tupled.toList
// res8: List[(Symbol, Symbol)] = List(('A,'B), ('B,'C), ('C,'D), ('D,'E), ('E,'F))
如果您想要更优雅的东西,我建议您寻找在列表和元组之间转换的好方法。最简单的方法是使用
尾部和邮政编码:
val xs = Seq('A', 'B', 'C', 'D', 'E')
xs zip xs.tail
如果效率是一个问题(即,您不想通过调用tail
创建额外的中间序列,并且您使用的Seq
不是List
s,这意味着tail
需要O(n)),那么您可以使用视图:
xs zip xs.view.tail
事实上,@axel22的回答比我的好得多!将其保留在此处仅供参考。滑动
(不带映射代码)会生成列表而不是元组,这也可以。如果Seq
实际上是一个列表,那么xs-zip-xs.tail
非常有效。确切地说,在这种情况下,应该比使用视图更有效。