たとえば、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)
より良い/よりエレガントなオプションはありますか?
たとえば、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)
より良い/よりエレガントなオプションはありますか?
別のアプローチは次のとおりです。
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
です。
理解してみてください:
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)