如何创build具有相同元素n次的列表?

如何创build具有相同元素n次的列表?

手动执行:

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) 

是否也有内置的方法来做同样的事情?

请参阅scala.collection.generic.SeqFactory.fill(n:Int)(elem:=> A)集合数据结构(如SeqStreamIterator等)的扩展如下:

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

警告在Scala 2.7中不可用。

像这样使用tabulate

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

奇迹般有效。

我有另一个模拟flatMap的答案我想(发现这个解决scheme在应用duplicateN的时候返回Unit)

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

但是这是一个预定的列表,你想重复n次每个元素