Hi Graydon,
here is one more aproach for (it's not so flexible as the functional
approach, though):
declare function local:merge($maps as map(*)*) as map(*) {
map:merge(
for $key in distinct-values($maps ! map:keys(.))
return map { $key: ($maps ! .($key)) }
)
};
local:merge((
map { 'A': 1, 'B': 2 },
map { 'A': 3, 'C': 4 }
))
Cheers,
Christian
On Wed, Jul 15, 2015 at 8:01 PM, Graydon Saunders <graydonish@gmail.com> wrote:
> Hi --
>
> In BaseX 8.2.1, I have a bunch of maps; the maps may have some overlap of
> key values. I would like to merge/find the union of all of these maps while
> retaining all the values associated with each key in the resulting
> map-of-all-maps. (Combined map? Any word can be wrong, here! :)
>
> map:merge() doesn't do this;
> http://docs.basex.org/wiki/Map_Module#map:merge says
> "The associated value for each such key is taken from the last map in the
> input sequence $input that contains an entry with this key." and testing
> confirms this.
>
> Is there a straightforward way to do this that I'm missing?
>
> Thanks!
> Graydon