Я хочу сохранить идентификаторы на карте. Если идентификатор повторяется, я хочу установить количество ($ value) от 1 до 2 и так далее. После вы найдете мой код:
declare namespace functx = "http://www.functx.com";
declare variable $idMap := map{};
declare function functx:uniqueID ($entityID as xs:string) as xs:integer {
let $idMap := map:merge(($idMap, if(not(map:contains($idMap, $entityID))) then map:entry($entityID, 1) else map:entry(entityID, map:get($idMap, $entityID)+1)))
return map:get($idMap, $entityID)
};
declare variable $map := map:merge((
map:entry("Sheff", "85246525"),
map:entry("Peter", "85246454"),
map:entry("Marcel", "85246525"),
map:entry("Lion", "85244565"),
map:entry("Klaus", "85241234")
));
map:for-each($map,
function($key, $value) {
functx:uniqueID($value)
}
)
Результат:
1
1
1
1
1
Ожидаемый результат
1
1
2 (: Because it is the second time, that 85246525 occurs. :)
1
1
Отредактировано 23.03.2020 - 17:45: у меня сложный xquery, который работает. Но целевой системе нужны уникальные идентификаторы на строку. У меня есть карта, которая содержит мою информацию, как верхнюю. Мне нужно добавить что-то позади идентификаторов, например (001, 002, 003), чтобы иметь разные идентификаторы.
Рекомендуется, чтобы только дублированные идентификаторы получали добавленное число.
Понимаете ли вы? или что тебе еще нужно от меня?