Greetings,

Apologies if this seems like a pointless question but a) searches were
fruitless and b) hopefully this is interesting to consider ...

I'm wanting to create a map from two seqs (:keys and values), and it
seems surprisingly tricky.

I would rather not use hash-map, but if I did the following would
suffice:

=> (apply hash-map (apply concat (map vector [:a :b :c] [[1 2] [2 3]
[3 4]])))
{:a [1 2], :c [3 4], :b [2 3]}

The quick answer would be a function equivalent to {} in the place of
hash-map above, but I can't find such a thing.

My two answers are:
a) compose assoc functions:
=> ((apply comp (map #(fn [m] (assoc m % %2)) [:a :b :c] [[1 2] [2 3]
[3 4]])) nil)
{:a [1 2], :b [2 3], :c [3 4]}

b) recursion:
=> (loop [[k & ks] [:a :b :c] [v & vs] [[1 2] [2 3] [3 4]] m {}] (if
(not k) m (recur ks vs (assoc m k v))))
{:c [3 4], :b [2 3], :a [1 2]}

Both seem wizzy/overly complex. I should probably just use hash-
map ... but am I missing some elegant way to perform this with vanilla
map?

Thanks,
Stuart

-- 
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

Reply via email to