Получить список частичных списков - PullRequest
2 голосов
/ 15 марта 2020

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

Для этого ввода: val input = List('a','b','a')

Я ожидаю этот вывод: val input = List(List(), List('a'), List('b'), List('a','a'), List('a', 'b'), List('a','b','a'))

Обратите внимание, что я не хочу включать List('b','b'), так как «b» присутствует только один раз в исходной коллекции, и я не хочу List('b','a'), поскольку он уже включен в другой порядок.

Я нашел несколько решений аналогичных проблем на основе метода subsets класса Set или combinations метод, но ни один, который удовлетворяет всем моим требованиям:

  • Разрешить дубликаты в исходной коллекции
  • Иметь "подсписки" произвольного размера
  • Исключить «подсписки», которые уже присутствуют в другом порядке.

1 Ответ

3 голосов
/ 15 марта 2020

Я думаю combinations() будет делать то, что вы хотите. Все подсписки представлены в порядке возрастания.

val input = List('a','b','a')

(0 to input.length).flatMap(input.combinations)
//res0: IndexedSeq[List[Char]] =
//      Vector(List(), List(a), List(b), List(a, a), List(a, b), List(a, a, b))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...