For completeness we should include a loop/recur pattern;

(defn fzipmap [f col]
  "Takes a col, applies f to each element and generates a
  hash map keyed on each element of col."
  (loop [col (seq col) mp {}]
    (if col (recur (next col) (assoc mp (first col) (f (first col))))
      mp)))

user=> (fzipmap #(+ % 3) [1 2 3])
{3 6, 2 5, 1 4}

Regards, Adrian.

On Mon, Aug 24, 2009 at 6:43 PM, samppi<rbysam...@gmail.com> wrote:
>
> Wonderful; I totally didn't know about zipmap. I've been using into
> and map this whole time. Was it added right before Clojure 1.0? It
> seems to be a lot faster than using into:
>
> Clojure 1.0.0-
> user=> (time (into {} (for [i [1 2 3]] [i (+ 3 i)])) )
> "Elapsed time: 0.705 msecs"
> {3 6, 2 5, 1 4}
> user=> (time (zipmap [1 2 3] (map #(+ 3 %) [1 2 3])))
> "Elapsed time: 0.25 msecs"
> {3 6, 2 5, 1 4}
>
> On Aug 24, 9:15 am, Dragan Djuric <draga...@gmail.com> wrote:
>> (zipmap coll1 coll2) should be faster than (apply hash-map (interleave
>> coll1 coll2)) and the doc description hints that's what it was made
>> for.
>>
>> On Aug 24, 8:25 am, Garth Sheldon-Coulson <g...@mit.edu> wrote:
>>
>>
>>
>> > Welcome again.
>>
>> > Here's another way. Not sure if it's any more or less efficient, but it's
>> > the way my brain works.
>>
>> > => (defn map-hashmap [coll f]
>> >        (apply hash-map (interleave coll (map f coll))))
>> > #'user/map-hashmap
>>
>> > => (map-hashmap [1 2 3] #(+ % 3))
>> > {1 4, 2 5, 3 6}
>>
>> > On Mon, Aug 24, 2009 at 2:18 AM, Stephen C. Gilardi 
>> > <squee...@mac.com>wrote:
>>
>> > > On Aug 23, 2009, at 8:21 PM, Stan Dyck wrote:
>>
>> > >  I'm still new to this so bear with me.
>>
>> > > Welcome.
>>
>> > >  I'm trying to apply a function to a seq-able thing to produce a hashmap.
>> > >> So for instance say the function is (inc 3).
>> > >> I'd like to write a function that does
>>
>> > >> [1 2 3] --> {1 4, 2 5, 3 6}
>>
>> > >> Can someone help me?
>>
>> > > Here's one way:
>>
>> > > user=> (into {} (for [i [1 2 3]] [i (+ 3 i)]))
>> > > {1 4, 2 5, 3 6}
>>
>> > > --Steve
> >
>

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