11

たとえば、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)

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

4

4 に答える 4

9

別のアプローチは次のとおりです。

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です。

于 2012-11-04T00:25:15.060 に答える
8

理解してみてください:

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)
于 2012-11-03T21:00:11.803 に答える