Я пытаюсь смоделировать что-то похожее на проблему в магазине. Существует несколько заданий, которые можно выполнять разными способами, в которых используется различное количество задач для выполнения задания.
Я настроил эту структуру данных для представления этой информации:
enum Job;
enum Option;
int: maxTasks;
set of int: TaskIndex = 1..maxTasks;
enum Task;
array[Job, Option, TaskIndex] of opt Task: jobOptions;
Если jobOptions[j, o, index]
существует, это index
-я задача опции o
задания j
. Если он отсутствует, эта опция для этой работы не использует максимальное количество задач, и это один из пустых слотов.
Я не вижу, как я могу инициализировать этот массив. Если бы это был двумерный массив, я мог бы сделать
jobOptions = [|
T1, T2 |
T3, <>
|];
Поскольку это 3D, хочу сделать что-то вроде
jobOptions = array3d(Job, Option, TaskIndex, [
% Job 1
T1, T2, % Option 1
T3, <>, % Option 2
% Job 2
T2, T4, % Option 1
<>, <>, % No second option
|];
Однако это не удается, потому что есть три версии array3d, которые принимают массивы (par) int
, var int
и var opt int.
. Мне нужна четвертая версия, принимающая (par) opt int
, поскольку <>
имеет тип var opt int
.
Сначала я пытался сделать что-то вроде
array[Job] of array[int] of array[int]: jobOptions
сделать "неквадратный" массив, но если это возможно, я не смог понять правильный синтаксис.
Есть ли способ инициализировать массив 3D-параметров с отсутствующими необязательными элементами? В качестве альтернативы, есть ли лучший способ представить эти данные?