[xquery-talk] From map entry pairs to a pair of arrays
Emmanuel Chateau
emchateau at laposte.net
Sat Jul 15 09:12:39 PDT 2017
Hi,
I would say
```
let $letters-numbers := map { "a": 1, "b": 2, "c": 3 }
let $keys := map:keys($letters-numbers)
return (
array { $keys },
array { for $key in $keys return map:get($letters-numbers, $key) }
)
```
> Le 15 juil. 2017 à 11:41, Joe Wicentowski <joewiz at gmail.com> a écrit :
>
> Hi all,
>
> Is there an efficient way to transform entries in a map into two arrays, one containing the keys and one containing the values? Here's my attempt:
>
> ```
> xquery version "3.1";
>
> let $letters-numbers := map { "a": 1, "b": 2, "c": 3 }
> return
> (
> array { map:keys($letters-numbers) },
> array { $letters-numbers?* }
> )
> ```
>
> This successfully takes `map { "a": 1, "b": 2, "c": 3 }` and returns (["a", "b", "c"], [1, 2, 3]), but the way it iterates through the map twice strikes me as somewhat inefficient. Is there a better way to reduce this to a single pass through the map, or is this actually the best approach?
>
> Joe
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
More information about the talk
mailing list