102 votes

Comment créer une liste avec le même élément n- fois ?

Comment créer une liste avec le même élément n- fois ?

Implémentation manuelle :

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-t-il un moyen intégré de faire la même chose ?

188voto

sschaef Points 20242

Voir scala.collection.generic.SeqFactory.fill(n:Int)(elem : =>A) que les structures de données de collecte, comme Seq , Stream , Iterator et ainsi de suite :

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

AVERTISSEMENT Il n'est pas disponible dans Scala 2.7.

13voto

enzyme Points 2347

Utilisation de tabulate comme ça,

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

13voto

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

Fonctionne comme un charme.

1voto

Tomás Duhourq Points 183

J'ai une autre réponse qui émule flatMap je pense (j'ai découvert que cette solution retourne Unit quand on applique duplicateN)

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

mais c'est plutôt pour une Liste prédéterminée et vous voulez dupliquer n fois chaque élément

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X