Scala - Создать множественный список из списка - PullRequest
0 голосов
/ 21 апреля 2020

flatMap принимает целочисленный ввод из командной строки. Список должен быть создан с введенным количеством элементов в списке, начиная с единицы. Следовательно, когда input равен 3, List(1,2,3) должно быть сгенерировано. Каждое число в сгенерированном списке numberList = List(1,2,3) должно использоваться для создания отдельных списков с элементами, равными числу, начинающемуся с 1. Следовательно, когда input равен 3; Список (1), Список (1, 2), Список (1, 2, 3) должны быть созданы и объединены, чтобы получить результат resultList как List(1, 1, 2, 1, 2, 3)

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Если я правильно понимаю, что для входа n = 3 вы ожидаете выход (1, 1, 2, 1, 2, 3), а для входа n = 4 вы ожидаете выход (1, 1, 2, 1, 2, 3, 1, 2, 3, 4).

В таком случае это так же просто, как

def f(n: Int) = for {
  i <- (1 to n)
  j <- (1 to i)
} yield j

Я попробовал это на аммоните и получил

@ def f(n: Int) = for {
    i <- (1 to n)
    j <- (1 to i)
  } yield j
defined function f

@ f(3)
res2: collection.immutable.IndexedSeq[Int] = Vector(1, 1, 2, 1, 2, 3)

@ f(4)
res3: collection.immutable.IndexedSeq[Int] = Vector(1, 1, 2, 1, 2, 3, 1, 2, 3, 4)
1 голос
/ 22 апреля 2020

1-вкладыш (просто для удовольствия).

def f(n :Int) = (n to 1 by -1).tails.flatten.toList.reverse

или

def f(n :Int) = List.tabulate(n)(x => 1 to (x+1)).flatten
1 голос
/ 21 апреля 2020

Вот логи c, которые вам нужны, вы можете адаптировать их к конкретному случаю использования.
Также вам нужно будет добавить все остальные детали, такие как ввод и вывод.

def foo(n: Int): List[Int] = {
  def listUntil(x: Int): List[Int] =
    List.range(start = 1, end = (x  + 1))

  listUntil(n).flatMap(listUntil)
}
...