Re: [xsl] XQuery/XPath 3.1: Node List to Node Set ("distinct nodes")

Subject: Re: [xsl] XQuery/XPath 3.1: Node List to Node Set ("distinct nodes")
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 28 Dec 2021 23:32:05 -0000
On Tue, Dec 28, 2021 at 3:29 PM Dimitre Novatchev <dnovatchev@xxxxxxxxx>
wrote:

> A pure XPath solution:
>
> let $ids := distinct-values($nodes ! generate-id(.))
>    return  $ids ! (function($id) {$nodes[generate-id(.) eq $id][1]})(.)
>
> Happy New Year to all !
>


Hit Send too early:

Do notice: this seems the only solution of all presented so far, that
preserves the original sequence order (not document order) of the nodes.



>
> On Tue, Dec 28, 2021 at 2:39 PM Wendell Piez wapiez@xxxxxxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>> Eliot and XSL-List,
>>
>> Along similar lines to $nodes | (), consider
>>
>> $nodes except ()
>> $nodes intersect $nodes
>>
>> I'm finding it difficult to argue what's most intuitive but I kind of
>> like 'intersect'. Can't vouch for performance though. :-)
>>
>> Best wishes for 2022 --
>> Wendell
>>
>>
>>
>>
>> On Tue, Dec 28, 2021 at 4:56 PM Michael Kay mike@xxxxxxxxxxxx <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>>> You might consider
>>>
>>> $nodes | ()
>>>
>>> a bit more intuitive.
>>>
>>> Michael Kay
>>> Saxonica
>>>
>>> On 28 Dec 2021, at 19:23, Eliot Kimber eliot.kimber@xxxxxxxxxxxxxx <
>>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>>
>>> Hmph.
>>>
>>> That is certainly much more efficient p
 but is not necessarily obvious
>>> (at least not to me).
>>>
>>> Thanks!
>>>
>>> E.
>>>
>>> _____________________________________________
>>> *Eliot Kimber*
>>> Sr Staff Content Engineer
>>> O: 512 554 9368
>>>
>>> M: 512 554 9368
>>> servicenow.com <https://www.servicenow.com/>
>>> LinkedIn <https://www.linkedin.com/company/servicenow> | Twitter
>>> <https://twitter.com/servicenow> | YouTube
>>> <https://www.youtube.com/user/servicenowinc> | Facebook
>>> <https://www.facebook.com/servicenow>
>>>
>>>
>>> *From: *Martin Honnen martin.honnen@xxxxxx <
>>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
>>> *Date: *Tuesday, December 28, 2021 at 1:15 PM
>>> *To: *xsl-list@xxxxxxxxxxxxxxxxxxxxxx <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
>>> *Subject: *Re: [xsl] XQuery/XPath 3.1: Node List to Node Set ("distinct
>>> nodes")
>>>
>>> [External Email]
>>>
>>>
>>> On 28.12.2021 20:10, Eliot Kimber eliot.kimber@xxxxxxxxxxxxxx wrote:
>>> > I couldnbt find an answer in my google and markmail searching so I
>>> > thought Ibd ask here:
>>> >
>>> > Given an arbitrary list of nodes that may contain duplicates, what is
>>> > the most efficient way to reduce the node list to a set?
>>> >
>>> > The solution I came up with is a recursive function:
>>> >
>>> > (:
>>> >
>>> > Get the unique nodes from the supplied sequence
>>> >
>>> > @param nodes The sequence of nodes to evaluate
>>> >
>>> > @return A sequence of nodes such that each node in $nodes exists
>>> exactly
>>> > once.
>>> >
>>> > :)
>>> >
>>> > declare function dutils:distinctNodes($nodes as node()*) as node()* {
>>> >
>>> >    dutils:_getDistinctNodes($nodes, ())
>>> >
>>> > };
>>> >
>>> > declare function dutils:_getDistinctNodes($nodes as node()*,
>>> $resultList
>>> > as node()*) as node()* {
>>> >
>>> >    if (exists($nodes))
>>> >
>>> >    then
>>> >
>>> >    let $node := head($nodes)
>>> >
>>> >    return dutils:_getDistinctNodes(tail($nodes), ($resultList | $node))
>>> >
>>> >    else $resultList
>>> >
>>> > };
>>> >
>>> > Which works but I feel like Ibm missing some obvious way to do this
>>> more
>>> > directly, but Ibm not seeing it.
>>> >
>>> > Am I missing a better solution?
>>>
>>> $nodes/.
>>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
>>> email)
>>>
>>>
>>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/174322> (by
>>> email)
>>>
>>
>>
>> --
>> ...Wendell Piez... ...wendell -at- nist -dot- gov...
>> ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
>> ...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
>> email <>)
>>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> To achieve the impossible dream, try going to sleep.
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> Sanity is madness put to good use.
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.
>
>


--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread