Given the recent discussions about specter, I thought I'd add a spectral
solution. Disclaimer: I'm still a specter novice.
An unrolled solution might look like this:
(select [ALL (collect-one FIRST) LAST
ALL (collect-one FIRST) LAST
ALL (collect-one FIRST) LAST]
data)
=> [[30 4 50 43] [30 4 1000 32] [30 6 40 12] [30 6 90 2] [30 8 777 23] [30 8
9090 1]]
Each repetition in that path starts with a map, navigates to each key-value
pair (ALL), collects its key (collect-one FIRST), and navigates to its
value (LAST). The values are themselves maps, so we repeat.
This obviously lends itself to recursive navigation:
(def TreePaths
(recursive-path [] p
(if-path map?
[ALL (collect-one FIRST) LAST p]
STAY)))
(select [TreePaths] data)
=> [[30 4 50 43] [30 4 1000 32] [30 6 40 12] [30 6 90 2] [30 8 777 23] [30 8
9090 1]]
On Wednesday, March 8, 2017 at 12:38:18 PM UTC-5, [email protected] wrote:
>
>
> Given this:
>
> {:positive :true {30 {4 {50 43, 1000 32}, 6 {40 12, 90 2}, 8 {777 23, 9090
> 1}}}
>
> I'd like a series of arrays that I can feed into (reduce) so I can easily
> sum them:
>
> [ 30 4 50 43 ]
>
> [ 30 4 1000 32 ]
>
> [ 30 6 40 12 ]
>
> [ 30 6 90 2 ]
>
> [ 30 8 777 23 ]
>
> [ 30 8 9090 1 ]
>
> I've been trying to work this out using "walk" recursively, but then I
> wondered if perhaps I am missing something obvious? Does Clojure offer a
> straightforward way to do this?
>
>
>
>
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.