Хотелось бы знать лучший подход для построения логики генерации уникального идентификатора для задачи ниже.
Скажем, у меня есть вывод 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++;
}
Затем я повторяю это снова, чтобы создать отображение родительского идентификатора и переименовывать обратно вОригинальный текст / название.