Выберите подмножества из списка [Int], увеличивая длину до длины списка [Int]. - PullRequest
0 голосов
/ 29 мая 2020

У меня есть список целых чисел как:

val list= List(5,-2,10,-1,4)

И я хочу желаемый результат в виде списка следующих подмножеств из списка

List(
(5),
(5,-2),
(5,-2,10),
(5,-2,10,-1),
(5,-2,10,-1,4),
(-2,10,-1,4),
(10,-1,4),
(-1,4),
(4)
)

Как я могу написать код, используя аспект функционального программирования Scala? Или используя любые конструкции for loop?

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

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

val part1 = for (i <- (1 to list.size)) yield list.take(i)
val part2 = for (i <- (1 until list.size)) yield list.drop(i)
(part1 ++ part2).toList

Если вы хотите однострочник, то:

( (1 to list.size).map(list.take) ++ (1 until list.size).map(list.take) ).toList
3 голосов
/ 29 мая 2020

Как я всегда говорю, Scalado c - ваш друг.

list.toSet.subSets.map(_.toList).toList

(Обратите внимание, поскольку это выразительная операция , может быть лучше использовать Iterator , который возвращает subsets, вместо того, чтобы использовать все это один раз в большом списке списков)

...