2012-11-03 14 views
8

の各隣接する二つの要素の間の要素を挿入し、私は、配列(1,2,3)を持っていると私は、配列(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) 

より良い/よりエレガントなオプションはありますか?

答えて

7

理解のために試してみてください。

for(i <- list; p <- List(0, i)) yield p 

あなたは何とか最初の要素を(それが得られます。0,1,0,2,0,3)削除する必要がありますが、どちらかによって:

(for(i <- list; p <- List(0, i)) yield p).tail 

か:

ここ
list.head :: (for(i <- list.tail; p <- List(0, i)) yield p) 
5

別のアプローチです:

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) 
} 

空の上で安全ですSeqもあります。