Как создать список с одним и тем же элементом n-раз?
Как создать список с одним и тем же элементом n-раз ?
вручную implementnation:
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)
есть также встроенный способ сделать то же самое ?
4 ответа:
посмотреть скала.коллекция.родовой.SeqFactory.заполните (n:Int) (elem: =>A) что сбор данных структур, как
Seq
,Stream
,Iterator
и так далее, расширить:scala> List.fill(3)("foo") res1: List[String] = List(foo, foo, foo)
предупреждение он недоступен в Scala 2.7.
у меня есть еще один ответ, который эмулирует flatMap я думаю (выяснил, что это решение возвращает единицу при применении 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)(_) }
но это скорее для предопределенного списка, и вы хотите дублировать n раз каждый элемент