Я пытаюсь создать расширение для массива, в котором я могу получить все возможные комбинации массива без генерации повторяющихся групп, включая комбинацию без элементов.
Например, для этого массива:
[1, 2, 3, 4]
Должны быть сгенерированы следующие возможные комбинации:
[[], [1], [2], [3], [4], [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]]
Обратите внимание, что ни одна из групп не повторяется, т.е.: если есть группа [1, 2], то другой группы нет: [2, 1].
Это самый близкий результат, который мне удалось получить:
public extension Array {
func allPossibleCombinations() -> [[Element]] {
var output: [[Element]] = [[]]
for groupSize in 1...self.count {
for (index1, item1) in self.enumerated() {
var group = [item1]
for (index2, item2) in self.enumerated() {
if group.count < groupSize {
if index2 > index1 {
group.append(item2)
if group.count == groupSize {
output.append(group)
group = [item1]
continue
}
}
} else {
break
}
}
if group.count == groupSize {
output.append(group)
}
}
}
return output
}
}
Но отсутствует возможная комбинация предметов в группе размера 3 (я только вернусь [1, 2, 3]
и [2, 3, 4]
.
Очень ценится!