Определить сопоставление узлов и создать уникальный идентификатор - PullRequest
0 голосов
/ 03 октября 2019

Хотелось бы знать лучший подход для построения логики генерации уникального идентификатора для задачи ниже.

Скажем, у меня есть вывод json, как показано ниже,

[
 {
   "currentNode":"campaign1",
   "nextNode": "campaign2"
 },
 {
   "currentNode":"campaign2",
   "nextNode": "campaign3"
 },
 {
   "currentNode":"campaign3",
   "nextNode": "campaign1"
 },
 {
   "currentNode":"campaign1",
   "nextNode": "campaign4"
 },
 {
   "currentNode":"campaign4",
   "nextNode": ""
 }
]

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

(кампания1 -> кампания2, кампания2 -> кампания3, кампания3 -> кампания1)

или линейный

(кампания1 -> кампания2, кампания2 -> кампания3, кампания3 -> кампания1, кампания1 -> кампания4). // здесь campaign1 - дубликаты, но родительские элементы каждого из них разные, следовательно, они должны иметь разные идентификаторы.

Если циклический, то уникальный идентификатор будет одинаковым для повторяющегося значения. пример: в приведенных выше данных json дублирующееся значение campaign1 не является круговым, поскольку родительский узел каждого из них различен. Предположим, что если вместо пустого последнего узла мы предоставляем значение как campaign1, то идентификатор campaign1 последнего узла и идентификатор campaign1 первого узла должны совпадать.

Я попробовал следующий подход, но он очень далек от оптимального кода и сталкивается с проблемой,

int suffix = 0;
// first loop to add unique textnames to an object.
foreach (var camps in result)
{
    outputData.Add(new CampaignConnector
    {
        Id = GenerateUniqueId(), //generates GUID
        Text = camps.CampaignName + "_" + suffix.ToString(),
        Leg =  new Leg
             {
                 NextNodeId= "",
                 Text = string.IsNullOrEmpty(camps.NextLinkedName)? "": camps.NextLinkedName + "_" + (suffix+1).ToString(),
             }
    });
    suffix++;
}

Затем я повторяю это снова, чтобы создать отображение родительского идентификатора и переименовывать обратно вОригинальный текст / название.

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