On Monday, December 31, 2012 3:13:42 AM UTC+11, Huey Petersen wrote:
>
>
> 2) Is there a good way of doing this with nested maps? An example:
>
> { :user { :first "John" :last "Doe" :dob { :month 12 :day 30 :year 2012
> :garbage "asdf" } } }
>
> I would want to make sure :dob only contains keys :month, :day, :year.
>
Hi there,
Disclaimer - I'm very much a beginner with functional programming, Lisp and
Clojure. If I understand what you want, I was facing a similar situation
and came up with a working solution (I think). I'm pretty sure this is a
naïve solution but it kept me going so far. I'd be happy to hear about
other solutions myself.
I did it by walking the data structure using postwalk.
(require '[clojure.walk :as w])
(def data {:user {:first "John" :last "Doe" :dob {:month 12 :day 30 :year
2012 :garbage "asdf" }}})
(w/postwalk #(if (vector? %) (when (or (= :user (first %)) (= :first (first
%)) (= :last (first %)) (= :dob (first %)) (= :year (first %)) (= :month
(first %)) (= :day (first %)) ) %) %) data)
Or in your case, since you have less keys/values you want to remove you
could do.
(w/postwalk #(if (vector? %) (when-not (= :garbage (first %)) %) %) data)
Unfortunately, I have to hard-wire the keys at the moment. Hope this will
give you something to work with if you have not got anything yet.
--
GH
--
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