在Seq的每两个相邻元素之间插入一个元素

mmm*_*ell 8 scala

例如,我有Seq(1,2,3),我想获得Seq(1,0,2,0,3)

首先想到的是:

  scala> Seq(1,2,3).flatMap(e => 0 :: e :: Nil).tail
  res17: Seq[Int] = List(1, 0, 2, 0, 3)
Run Code Online (Sandbox Code Playgroud)

有没有更好/更优雅的选择?

Tom*_*icz 8

尝试理解:

for(i <- list; p <- List(0, i)) yield p
Run Code Online (Sandbox Code Playgroud)

但是你必须以某种方式删除第一个元素(它产生:) 0,1,0,2,0,3,或者通过:

(for(i <- list; p <- List(0, i)) yield p).tail
Run Code Online (Sandbox Code Playgroud)

要么:

list.head :: (for(i <- list.tail; p <- List(0, i)) yield p)
Run Code Online (Sandbox Code Playgroud)


Rob*_*ert 7

这是另一种方法:

def intersperse[E](x: E, xs:Seq[E]): Seq[E] = (x, xs) match {
    case (_, Nil)     => Nil
    case (_, Seq(x))  => Seq(x) 
    case (sep, y::ys) => y+:sep+:intersperse(sep, ys)
}
Run Code Online (Sandbox Code Playgroud)

这对空Seqs来说也是安全的.