2017-02-22 11 views
-1

Любая идея, чтобы сделать лучший код для комбинации:Как перечислить комбинированную возможность в golang

с этим:

letters := []string{"a", "b", "c", "d"} 

иметь: a ab ac ad abc abd b bc bcd и т.д ...

привет и спасибо

+0

Эта модель не является правильным. Это полный выход. 'a ab ac ad abc abd b bc bcd, c, cd' – atilkan

+0

См. Knuth, TAOCP §7.2 – Volker

ответ

2

Вы ищете Powerset:

Один a pproach является:

Начните с slice с один пустым элементом, давайте назовем это результатом:

[[]]

Держите предыдущий кусочек, и создать новый фрагмент с первым элементом a из структуры ваших данных добавлена ​​в вы к каждому элементу в вашем оригинальном срезе.

[[]] < --old; [[a]] < --new

объединить их

[[], [a]]

Сделайте то же самое для второго элемента b:

[[], [a]] < --old; [[b], [ab]] < --new

=>[[], [a], [b], [ab]]

для c:

< [[], [a], [b], [ab]] --old; [[c], [ac], [bc], [abc]] < --new

=>[[], [a], [b], [ab], [c], [ac], [bc], [abc]]

и так далее ..

+0

Чтобы дополнить этот ответ, это отличная ссылка, в которой приводятся примеры того, как манипулировать срезами https://github.com/golang/Go/вики/SliceTricks – reticentroot