Это не перестановки, см. определения перестановок из Википедии.
Но вы можете добиться этого с помощью рекурсии:
var allArrays = [['a', 'b'], ['c'], ['d', 'e', 'f']]
function allPossibleCases(arr) {
if (arr.length == 1) {
return arr[0];
} else {
var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array
for (var i = 0; i < allCasesOfRest.length; i++) {
for (var j = 0; j < arr[0].length; j++) {
result.push(arr[0][j] + allCasesOfRest[i]);
}
}
return result;
}
}
Вы также можете сделать это с петлями, но это будет немного сложно, и вам потребуется реализовать свой собственный аналог стека.
Как говорит @gaurav, способ справиться с этим в Visual Studio - с листами свойств . К сожалению, этот термин используется для двух разных вещей в VS, но я думаю, что они просто закончили имена (предупреждение о спойлере).
Это очень мощные, как только вы узнаете как они работают, и они именно то, что вам нужно здесь, потому что они позволяют вам определять макросы, и эти макросы могут, в свою очередь, использоваться в остальной части вашего проекта, чтобы ссылаться на (изменчивое) местоположение ваших различных библиотек. Это трюк, который каждый, кто использует VS, должен знать, но кажется, что многие люди этого не делают.
Я не думаю, что это стоит того, чтобы я пытался провести вас через механику настройки здесь, поскольку Microsoft уже документирует его в файле справки Visual Studio. Достаточно сказать, что вы делаете это в Property Manager, что должно помочь вам отследить соответствующую информацию.
Здесь также есть отличная запись в блоге, которую я рекомендую вам прочитать, прежде чем делать что-либо еще:
http://www.dorodnic.com/blog/2014/03/20/visual-studio-macros/
Это также на Wayback Machine здесь:
Хорошо, теперь мы знаем, как определить макрос, что мы можем с ним сделать?
Ну, на самом деле это легкая часть. Если у нас есть макрос, называемый, скажем, FOO
, тогда везде, где мы хотим развернуть этот макрос в некоторых настройках проекта или других, мы можем просто использовать $(FOO)
. В состав IDE также входит куча макросов:
https://msdn.microsoft.com/en-us/library/c02as0cs.aspx
Итак, вы, я полагаю, захотите определить макросы для каталогов include
и lib
для каждой из ваших внешних библиотек, и вы можете использовать их для замены жестко закодированных путей, которые вы используете в настоящее время в ваш проект.
И это, я считаю, должно сортировать вас, потому что определения самих макросов хранятся в отдельном файле , внешнем по отношению к вашему файлу проекта, и разным пользователи / сборщики могут использовать разные файлы. IIRC, они имеют расширение .props
.
Кроме того, вы можете определить макрос в терминах другого макроса или макроса, и это облегчает работу.
Итак, кто еще думает, что Microsoft не знает, как создать систему сборки? Visual Studio является фантастической частью программного обеспечения, как только вы привыкнете к ней, есть лишь немного кривая обучения.
Путь к большому проекту - использовать диспетчер пакетов. Есть несколько хороших вариантов. Возможно, в окнах и визуальной студии вы можете использовать неуправляемые vcpkg или NuGet.
Если вы не можете использовать диспетчер пакетов по какой-то причине, следующая вещь должна состоять в том, чтобы зафиксировать все зависимости от репозитория GIT. Если вы ориентируетесь только на платформы Windows, такие как окна 8 или 10, и хотите поддерживать только VS2017, то компиляция зависимостей не является проблемой. Недостатком является то, что репо станет огромным.
Для крошечного школьного проекта последний вариант жизнеспособен.