Another XPath 3.1 solution - uses fold-left and is not exactly compact:
(fold-left($values, [map {}, []], function($acc as array(*), $n as xs:string)
{
let $map := $acc(1), $result := $acc(2), $isDupe := ($map($n)) return
if (empty($isDupe)) then [ map:put($map, $n, false()), $result]
else if ($isDupe) then $acc
else array { map:put($map, $n, true()), array:append($result, $n)}
}))(2)
On Fri, Jan 3, 2025 at 10:52b/AM Roger L Costello costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi Folks,
>
> $fieldnames is a list of strings, e.g.,
>
> ('TYPE', 'USAGE_CD', 'DIR', 'WGS_LAT', 'TYPE', 'WGS_LONG', 'TURN_DIR',
'DIR', 'TYPE')
>
> I want a list of the duplicates in $fieldnames:
>
> ('TYPE', 'DIR') <-- I don't want any duplicates in this list
>
> Is there a simple XPath expression to obtain the list of duplicates in
$fieldnames?
>
> /Roger
|