Объединение двух кортежей на основе идентификатора в OPL - PullRequest
0 голосов
/ 28 марта 2020

У меня есть кортеж с именем blockType

tuple blockType {
    key string id;
    int i;
    int j;
    int k;
 };
{blockType} PitBlocksType =…; \\read from excel

Снимок данных выглядит примерно так:

P1  1   1   2
P2  1   1   3
P3  1   1   4
P4  1   1   5
P5  1   1   6
P6  1   1   7
P7  1   1   8
P8  1   1   9
P9  1   1   10
P10 1   1   11

И еще один кортеж

tuple Path {
int id;
string source;
string dest;
{string} pitblockSet;
{string} roadPoints; // not used
{string} dumpblockSet;
{string} others;
float dist;
};

{Path} Pbd читается из Excel, и данные выглядят следующим образом:

PathId  Source  Destination pitBlockSet Road    DumpBlockSet         Others Distance
1       P1      D1         P1           R8       D45 D42 D39 D14 D1         581.3956
2       P1      D1         P1           R8       D40 D14 D1                 587.1185
3       P1      D1         P1           R8       D43 D16 D2 D1              588.7774
4       P2      D1         P2 P44       R8       D45 D42 D39 D14 D1         539.7307

В этом случае мой особый интерес связан с pitBlockSet, который просто содержит идентификатор blockType, он может иметь один или несколько идентификаторов типа P1, P23 и т. Д. c. Мне нужно создать набор, который имеет тип {blockType}, и имеет идентификаторы из pitBlockSet пути и остальную часть из pitBlocksType. Так что это объединение Path.pitBlockSet и PitBlocksType.

Я попробовал следующие варианты:

{blockType} PitBlocksInPath[p in Pbd] = union(b in p.pitblockSet) PitBlocksType [<b>];

Я получаю следующие ошибки:

Not an array type 

Is это синтаксическая ошибка или не должно быть union

1 Ответ

0 голосов
/ 30 марта 2020

Как указывает сообщение об ошибке, проблема в том, что PitBlocksType не является массивом. Это набор. Вы можете превратить это в массив, чтобы исправить ошибку. Если это не вариант, то вместо PitBlocksType[<b>] вы можете написать что-то вроде {b2 | b2 in PitBlockType : b2.id == n}, то есть, explicity создайте набор из одного блока, имеющий идентификатор b.

...