Thank you!
Are these easy enough that a map:union() function operating on a sequence of maps isn't something to ask for in the next spec iteration?
-- Graydon
On Fri, Jul 17, 2015 at 4:18 AM, Christian Grün christian.gruen@gmail.com wrote:
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