Перебор декартовых произведений списков - PullRequest
0 голосов
/ 09 апреля 2020

Рассмотрим следующую серию вложенных циклов 1 :

for TEXT in "$BTEXT" "$BTEXT $BTEXT"; do
    for GRAVITY in NorthWest SouthEast Center South; do
        for PSIZE in 30 60 90 120; do
            # body could be more complex in reality
            some_command $TEXT $GRAVITY $PSIZE 
        done
    done
done

Структура каждого l oop одинакова: перебор списка. По сути, все это перебирает кортежи декартового произведения всех списков.

Я хотел бы удалить вложенные циклы, потому что в конечном итоге это становится неустойчивым, так как количество списков растет. В идеале, это так просто, как что-то вроде:

TEXT="$BTEXT" "$BTEXT $BTEXT"
GRAVITY="NorthWest SouthEast Center South"
PSIZE="30 60 90 120"

for TUPLE in #magic here#; do
 ...
done

Я знаю, что мог бы уменьшить визуальное вложение, например, введя функцию для каждого уровня, но это кажется хуже, чем текущее решение.


1 Да, я знаю, что присвоение TEXT здесь точно не работает, поскольку не будет различий между пробелами между элементами и внутри элементов, так что, возможно, массивы надо будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...