tutorial software renault fungicida examples constructora blanquerna scala

scala - software - ¿Cómo crear una lista con el mismo elemento n-times?



scala tutorial (4)

Consulte scala.collection.generic.SeqFactory.fill (n: Int) (elem: => A) que las estructuras de datos de recopilación, como Seq , Stream , Iterator y demás, se extienden:

scala> List.fill(3)("foo") res1: List[String] = List(foo, foo, foo)

ADVERTENCIA No está disponible en Scala 2.7.

¿Cómo crear una lista con el mismo elemento n-times?

Implementación manual:

scala> def times(n: Int, s: String) = | (for(i <- 1 to n) yield s).toList times: (n: Int, s: String)List[String] scala> times(3, "foo") res4: List[String] = List(foo, foo, foo)

¿Existe también una forma incorporada de hacer lo mismo?


Tengo otra respuesta que emula flatMap, creo (descubrí que esta solución devuelve la unidad al aplicar duplicadoN)

implicit class ListGeneric[A](l: List[A]) { def nDuplicate(x: Int): List[A] = { def duplicateN(x: Int, tail: List[A]): List[A] = { l match { case Nil => Nil case n :: xs => concatN(x, n) ::: duplicateN(x, xs) } def concatN(times: Int, elem: A): List[A] = List.fill(times)(elem) } duplicateN(x, l) }

}

def times(n: Int, ls: List[String]) = ls.flatMap{ List.fill(n)(_) }

pero esto es más bien para una lista predeterminada y quieres duplicar n veces cada elemento


Usando tabulate como este,

List.tabulate(3)(_ => "foo")


(1 to n).map( _ => "foo" )

Funciona de maravilla.