Я построил этот образец кода в Swift Playgrounds как доказательство концепции для части более крупного проекта, над которым я работаю. Что мне нужно сделать, это передать ряд опций (представленных optionsArray или testArray), где каждый int - количество доступных опций. Эти варианты в конечном итоге будут встроены в 300 миллионов отдельных PDF-файлов и файлов HTML. В настоящее время этот код работает, и выдает огромный список возможностей, которые я хочу.Лучший подход к рекурсии?
Мой вопрос заключается в следующем: есть ли более эффективный подход к управлению подобной ситуацией? Есть ли что-то более элегантное или эффективное? Это не что-то, что будет запускаться в прямом эфире в приложении или что-то еще, оно будет запускаться из командной строки и принимать все необходимое, но если есть лучший подход к производительности или стабильности, я все уши.
Вещи, которые я уже знаю: он не может обрабатывать значение 0, выходящее из массива. Массив является константой, поэтому это не произойдет случайно. То, как код в строке будет обрабатывать вещи, 0 - это бессмысленное значение для использования. Каждый элемент представляет количество доступных опций, поэтому 2 по существу является логическим, 1 будет false. Поэтому, если мне нужны элементы-заполнители для будущего расширения, они будут иметь значение 1 и отображаться как 0 в выводе.
Кроме того, конечный продукт будет не просто штриховым текстом на консоль в качестве вывода, он напишет файл в функции permutationEnding()
на основе массива currentOptions
.
let optionsArray: [Int] = [7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2]
let testArray: [Int] = [7,2,3,2]
var currentOptions: [Int] = []
var outputString: String = ""
func buildPermutations(array: Array<Int>) {
currentOptions.removeAll()
permutationRecursion(array: array, index: 0)
}
func permutationRecursion(array: Array<Int>, index: Int) {
for i in 1 ... array[index] {
currentOptions.append(Int(i-1))
if array.count > (index + 1) {
permutationRecursion(array: array, index: index + 1)
} else {
permutationEnding()
}
currentOptions.removeLast()
}
}
func permutationEnding() {
for i in 1 ... currentOptions.count { // Output Elements
outputString += String(currentOptions[i-1])
}
outputString += "\n" // Goes after output elements closing bracket.
}
// buildPermutations(array: optionsArray)
buildPermutations(array: testArray)
print(outputString)
Мысли?
Что именно вы пытаетесь сделать? Создайте список перестановок с помощью некоторых предопределенных опций? –
По существу, да. У меня есть корпоративное приложение, которое позволяет людям проходить процесс собеседования, а некоторые из ответов, которые они дают, дают больше информации, которая будет помещена в PDF-файл, который динамически генерируется для них. Из-за характера работы, в которой я работаю, риск аудита для запуска пользовательского кода (PHP и т. Д.) На сервере является репрессивным, а варианты создания PDF на стороне клиента, которые используют JavaScript, в лучшем случае недостаточны. Меня попросили найти решение, которое не использует ни для веб-версии, аналогичной приложению. –
Итак, мне нужно будет перекачивать HTML-шаблоны в эту вещь (как и в случае с существующим приложением), и выставлять * все * возможности как готовые PDF-файлы. В конце концов, мне также нужно будет построить все дерево решений как HTML, поэтому оно работает так, как это делает приложение. Выходы этого типа будут чем-то вроде 50101010011 ... и т. Д., Когда это будет сделано.Это смешно, но это позволяет нам иметь все варианты без использования технологии серверной стороны. Регуляторы могут сделать жизнь странной. –