[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] getting all values from a map


Subject: Re: [xsl] getting all values from a map
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Mon, 01 Oct 2012 10:52:28 +0100

On 01/10/2012 10:12, Andrew Welch wrote:
On 29 September 2012 11:24, Jakub Mal} <jakub@xxxxxxx> wrote:
To get all values from a map as a single sequence I write
for $k in map:keys($mymap) return $mymap($k)
which is long and also probably ineffective (O(NlogN)?)

Is there some function to do the same thing (O(N)) that I have overlooked?
Doesn't look like it... perhaps it will get added - maybe by allowing
multiple items to be passed in eg map:get(map:keys($mymap))  ?

In the mean time, I guess you could store the entry set as a sequence
at the same time you construct the map.

Raise the comment and we'll look at it. We have looked at this in the past, and the problem is what kind of thing a function such as map:entries() might return. There was a proposal on the table to introduce tuples, but it was too complex. One possibility is to return a map with two entries named "key" and "value".

If brevity is the concern, you can do map:keys!$mymap(.) (But in practice I suspect wanting all the values is rare; people will usually want the keys as well, except perhaps in the case where the key can be computed as a function of the value).

Incidentally, we've never had any kind of capability to iterate over / enumerate the values of a key().

Michael Kay
Saxonica


Current Thread