Oh nvm, just saw that it was suggested before.

But maybe this is new:

(def m
  {"outerKeyA" {:innerKeyA {"string id" {:foo 1 :bar 2}}}
   "outerKeyB" {:innerKeyB {"string id" {:bar 5 :baz 10}}}})

(defn nested-seq [m]
  (for [[outer-key collections] m
        [collection-name collection] collections
        [string-id data] collection]
    {:outer-key outer-key :collection-name collection-name :string-id 
string-id :data data}
    ))

(pprint (nested-seq m))

;; produces
({:outer "outerKeyA",
  :collection-name :innerKeyA,
  :string-id "string id",
  :data {:foo 1, :bar 2}}
 {:outer "outerKeyB",
  :collection-name :innerKeyB,
  :string-id "string id",
  :data {:bar 5, :baz 10}})



for list comprehensions behave like doseq except that they return whatever 
the body does, thus letting you move your side effects somewhere else.

Maybe this helps,
/thomas

On Tuesday, December 10, 2013 12:48:56 PM UTC+1, Thomas Heller wrote:
>
> FWIW you can simplify the nested doseqs like this
>
> (doseq [[outer-keys collections] m
>             [collection-name collection] collections
>             [string-id data] collection]
>   ;; do stuff with the above
>   )
>
> HTH,
> /thomas
>
>
> On Wednesday, December 4, 2013 12:05:14 AM UTC+1, Ryan wrote:
>>
>> Hi all,
>>
>> I am trying to figure out a better way to loop the following map than 
>> using nested doseq. The map has the following structure:
>>
>> (def m
>>>   {"outerKeyA" {:innerKeyA {"string id" {:foo 1 :bar 2}}}
>>>    "outerKeyB" {:innerKeyB {"string id" {:bar 5 :baz 10}}}})
>>
>>
>> So, right now i am doing the following:
>>
>> (doseq [[outer-keys collections] m]
>>>   (doseq [[collection-name collection] collections]
>>>     (doseq [[string-id data] collection]
>>>       ;; do stuff with all the above 
>>> )))
>>
>>
>> Is there a more idiomatic/better way to do deeply nested 
>> iterations/traversal of map of maps?
>>
>> Thank you for any replies!
>>
>> Ryan 
>>
>>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to